I\'m making a game using canvas, and javascript.
When the page is longer than the screen (comments, etc.) pressing the down arrow scrolls the page down, and makes th
I've tried different ways of blocking scrolling when the arrow keys are pressed, both jQuery and native Javascript - they all work fine in Firefox, but don't work in recent versions of Chrome.
Even the explicit {passive: false} property for window.addEventListener, which is recommended as the only working solution, for example here.
In the end, after many tries, I found a way that works for me in both Firefox and Chrome:
window.addEventListener('keydown', (e) => {
if (e.target.localName != 'input') { // if you need to filter elements
switch (e.keyCode) {
case 37: // left
case 39: // right
e.preventDefault();
break;
case 38: // up
case 40: // down
e.preventDefault();
break;
default:
break;
}
}
}, {
capture: true, // this disables arrow key scrolling in modern Chrome
passive: false // this is optional, my code works without it
});
Quote for EventTarget.addEventListener() from MDN
options Optional
An options object specifies characteristics about the event listener. The available options are:capture
ABooleanindicating that events of this type will be dispatched to the registeredlistenerbefore being dispatched to anyEventTargetbeneath it in the DOM tree.
once
...
passive
ABooleanthat, if true, indicates that the function specified bylistenerwill never callpreventDefault(). If a passive listener does callpreventDefault(), the user agent will do nothing other than generate a console warning. ...