如何暂时禁用滚动? [英] How to disable scrolling temporarily?
问题描述
我正在使用scrollTo jQuery插件,想知道是否可以通过Javascript临时禁用滚动窗口元素?我想禁用滚动的原因是当你滚动时滚动动画,它会变得非常丑陋;)
I'm using the scrollTo jQuery plugin and would like to know if it is somehow possible to temporarily disable scrolling on the window element through Javascript? The reason I'd like to disable scrolling is that when you scroll while scrollTo is animating, it gets really ugly ;)
当然,我可以做 $(body)。css(overflow,hidden);
然后在动画停止时将其恢复为自动,但如果滚动条仍然是更好的话可见但不活动。
Of course, I could do a $("body").css("overflow", "hidden");
and then put it back to auto when the animation stops, but it would be better if the scrollbar was still visible but inactive.
推荐答案
无法取消滚动
事件。但您可以通过取消这些互动事件来实现:
鼠标 & 触摸滚动和按钮与滚动相关联。
The scroll
event cannot be canceled. But you can do it by canceling these interaction events:
Mouse & Touch scroll and Buttons associated with scrolling.
// 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 = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function preventDefaultForScrollKeys(e) {
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
function disableScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
window.onwheel = preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
window.ontouchmove = preventDefault; // mobile
document.onkeydown = preventDefaultForScrollKeys;
}
function enableScroll() {
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', preventDefault, false);
window.onmousewheel = document.onmousewheel = null;
window.onwheel = null;
window.ontouchmove = null;
document.onkeydown = null;
}
这篇关于如何暂时禁用滚动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!