Tengo una extensión de velocidad de reproducción de video súper simple. Debería aumentar la velocidad de reproducción en 0,25 cuando se hace Shift + MouseWheelUp y disminuir en 0,25 cuando se hace Shift + MouseWheelDown.
Cuando lo pruebo (en YouTube o en cualquier otro sitio de videos con una etiqueta de video HTML) tengo los siguientes problemas:
Pongo el código a continuación. Siéntase libre de copiar todo y probarse a sí mismo.
¿Por qué ocurren estos problemas y cómo puedo solucionarlos?
manifiesto:
{ "manifest_version": 2, "name": "Playback Speed Controller", "version": "1.0", "description": "Change playback speed using Shift + Scroll Up/Down.", "icons": { "48": "icons/playback-speed-controller-48.png" }, "content_scripts": [ { "matches": [ "https://odysee.com/*", "http://odysee.com/*", "https://www.youtube.com/*" ], "js": [ "playspeed.js" ], "run_at": "document_end" } ] }velocidad de juego.js
vid = document.querySelector('video'); document.addEventListener('keydown', changeSpeed); function changeSpeed(ke) { if (ke.shiftKey) { document.addEventListener('wheel', function (se) { if (se.deltaY < 0) { increaseSpeed(); } else if (se.deltaY > 0) { decreaseSpeed(); } }) } } function decreaseSpeed() { vid.playbackRate -= 0.25; } function increaseSpeed() { vid.playbackRate += 0.25; }Está agregando un nuevo oyente de rueda cada vez que se presiona shiftKey, por lo que todos estos oyentes anteriores se ejecutan para siempre y se activan en un desplazamiento de rueda y aplican sus cambios a la velocidad.
La solución es eliminar keydown y usar un oyente de wheel global que verifique shiftKey :
document.addEventListener('wheel', e => { if (e.shiftKey) { vid.playbackRate -= Math.sign(e.deltaY) * .25; } });