JavaScript如何暂时禁用滚动?

我使用的是scrollTo

jQuery插件,想知道是否可以通过Java临时禁用window元素上的滚动吗?我要禁用滚动的原因是,当您在scrollTo设置动画时滚动时,它确实很难看;)

当然,我可以做一个$("body").css("overflow",

"hidden");,然后在动画停止时将其放回自动状态,但是如果滚动条仍然可见但处于非活动状态会更好。

回答:

scroll事件无法取消。但是您可以通过 以下交互事件来实现:

以及与滚动关联的 。

// left: 37, up: 38, right: 39, down: 40,

// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36

var keys = {37: 1, 38: 1, 39: 1, 40: 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

var supportsPassive = false;

try {

window.addEventListener("test", null, Object.defineProperty({}, 'passive', {

get: function () { supportsPassive = true; }

}));

} catch(e) {}

var wheelOpt = supportsPassive ? { passive: false } : false;

var wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel';

// call this to Disable

function disableScroll() {

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);

}

// call this to Enable

function enableScroll() {

window.removeEventListener('DOMMouseScroll', preventDefault, false);

window.removeEventListener(wheelEvent, preventDefault, wheelOpt);

window.removeEventListener('touchmove', preventDefault, wheelOpt);

window.removeEventListener('keydown', preventDefaultForScrollKeys, false);

}

更新:修复了带有被动监听器的Chrome台式机和现代移动浏览器

以上是 JavaScript如何暂时禁用滚动? 的全部内容, 来源链接: utcz.com/qa/434523.html

回到顶部