我正在使用scrollTo jQuery插件,想知道是否可以通过Javascript暂时禁用窗口元素上的滚动?我想禁用滚动的原因是,当你在scrollTo动画中滚动时,它会变得非常丑陋;)
当然,我可以执行$("body").css("overflow", "hidden");,然后在动画停止时将其恢复为自动,但如果滚动条仍然可见但处于非活动状态,效果会更好。
发布于 2011-01-23 03:55:15
无法取消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桌面和现代移动浏览器
发布于 2012-08-23 18:58:09
只需在正文中添加一个类即可:
.stop-scrolling {
height: 100%;
overflow: hidden;
}在IE,FF,Safari和Chrome中测试,当你想重新启用滚动功能时,添加类,然后删除。
$('body').addClass('stop-scrolling')对于移动设备,您需要处理touchmove事件:
$('body').bind('touchmove', function(e){e.preventDefault()})并解除绑定以重新启用滚动。在iOS6和Android2.3.3上测试
$('body').unbind('touchmove')发布于 2011-01-23 03:29:56
这里有一个非常基本的方法:
window.onscroll = function () { window.scrollTo(0, 0); };在IE6中它有点跳跃。
https://stackoverflow.com/questions/4770025
复制相似问题