/** * Copyright (C) 2021 The Software Heritage developers * See the AUTHORS file at the top-level directory of this distribution * License: GNU Affero General Public License version 3, or any later version * See top-level LICENSE file for more information */ // adapted from https://stackoverflow.com/questions/4770025/how-to-disable-scrolling-temporarily // up: 38, down: 40, spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36 const keys = {38: 1, 40: 1, 32: 1, 33: 1, 34: 1, 35: 1, 36: 1}; function preventDefault(e) { e.preventDefault(); } function preventDefaultForScrollKeys(e) { if (keys[e.keyCode]) { preventDefault(e); return false; } } // modern Chrome requires { passive: false } when adding event let supportsPassive = false; try { window.addEventListener('test', null, Object.defineProperty({}, 'passive', { get: function() { supportsPassive = true; } })); } catch (e) {} const wheelOpt = supportsPassive ? {passive: false} : false; const wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel'; export function disableScrolling() { window.addEventListener('DOMMouseScroll', preventDefault, false); // older FF window.addEventListener(wheelEvent, preventDefault, wheelOpt); // modern desktop window.addEventListener('touchmove', preventDefault, wheelOpt); // mobile window.addEventListener('keydown', preventDefaultForScrollKeys, false); } export function enableScrolling() { window.removeEventListener('DOMMouseScroll', preventDefault, false); window.removeEventListener(wheelEvent, preventDefault, wheelOpt); window.removeEventListener('touchmove', preventDefault, wheelOpt); window.removeEventListener('keydown', preventDefaultForScrollKeys, false); }