Similar a esta solución, ¿cómo puedo reutilizar el código para incluir eventos keyDown y keyUp? Agregué uno incluso para KeyUp y KeyDown pero hay problemas cuando el usuario mantiene presionada y suelta una tecla y los eventos del evento keyUp original ya no se activan continuamente.
Ejemplo:
¿Cómo puedo mejorar esto? El objetivo es emparejar esto con un evento de rueda de desplazamiento del ratón. Si ctrl + rueda del mouse, escala el gráfico a lo largo del eje x. Si Alt+moussewheel entonces se escala a lo largo del eje Y de la estrategia. Si ambos o ninguno, entonces escala X e Y. Por último, ¿cómo puedo emparejar este evento modificador de tecla con la rueda de desplazamiento del mouse que proporcioné para que responda? Me doy cuenta de que hay momentos en los que los eventos clave bloquearán el evento de desplazamiento.
var scrollDelta = 0; $(document).on("keydown", reportKeyEvent("Pressed") ); $(document).on("keyup", reportKeyEvent("Released") ); $(document).bind("wheel", updateScroll); function reportKeyEvent (e, eventName) { var keyStr = ["Control", "Shift", "Alt"].includes(e.key) ? "" : e.key + " "; var out = eventName + " " + ( e.ctrlKey ? "Control " : "" ) + ( e.shiftKey ? "Shift " : "" ) + ( e.altKey ? "Alt " : "" ) + keyStr + "key(s)" ; console.log(out) ctrlKeyPressed = e.ctrlkey; shiftKeyPressed = e.shiftkey; altKeyPressed = e.altkey; // add shift+scroll? // add ctrl+scroll? e.stopPropagation (); e.preventDefault () } function updateScroll(e){ if(e.deltaY < 0){ scrollDelta +=50; }else if (e.delaY > 0){ scrollDelta -=50; }else{ scrollDelta = 0; } }Puede mantener su función reportKeyEvent. Simplemente cambie para usar el intervalo en lugar del evento
var keydownIntervalID; var keys = new Set(); $(document).keyDown(function(e) { keys.add(e.keyCode); if (!keydownIntervalID) { keydownIntervalID = setTimeout(reportKeyEvent, 50); } }); $(document).keyUp(function(e) { keys.delete(e.keyCode); if (keys.size === 0) { clearInterval(keydownIntervalID); keydownIntervalID = undefined; } });