javascript - 如何暂时禁用滚动?

标签 javascript jquery scroll

我正在使用 scrollTo jQuery 插件,想知道是否可以通过 Javascript 暂时禁用窗口元素上的滚动?我想禁用滚动的原因是当你在 scrollTo 动画时滚动时,它变得非常丑陋;)

当然,我可以做一个 $("body").css("overflow", "hidden"); 然后在动画停止时将其恢复为自动,但它会如果滚动条仍然可见但处于非事件状态,那就更好了。

最佳答案

scroll 事件无法取消。但您可以通过取消这些交互事件来实现:
鼠标 & 触摸滚动 和与滚动相关的按钮

[ Working demo ]

// 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 - 如何暂时禁用滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664138/

相关文章:

Oracle_ADF 12.2.1 中的 JavaScript 图像 slider

javascript - 使用 Node/JS 合并两个数据集

javascript - 允许国际字符的弹出式虚拟键盘

PHP/HTML/CSS 表格滚动

javascript - Ajax 请求不保留 Rails 中提供的完整 URL(协议(protocol))

javascript - 如何以编程方式禁用 chrome 开发人员工具中的 javascript?

javascript - JS无限滚动

javascript - 修复了某些滚动后 div 位于其他 div 内的问题

javascript - D3 树级别选择器

php - 如何使用搜索方法使用选择标签选项在 PHP、MYSQL 中搜索 id、电子邮件、用户名?