当前位置: 首页 > 面试题库 >

JavaScript如何暂时禁用滚动?

衡修洁
2023-03-14
问题内容

我使用的是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台式机和现代移动浏览器



 类似资料:
  • 如何禁用滚动?

  • 问题内容: 我想知道在使用selenium时如何禁用javascript,以便可以测试服务器端验证。 我找到了这篇文章,但我不知道该怎么做。就像我制作此javascript文件,然后呢? http://thom.org.uk/2006/03/12/disabling-javascript-from- selenium/ 问题答案: 编辑 在此期间,确实出现了更好的替代方法,请参见其他答案,例如 如

  • 问题内容: 是否可以暂时禁用MySQL中的约束? 我有两个Django模型,每个模型都有一个到另一个的ForeignKey。由于ForeignKey约束,删除模型实例将返回错误: 是否可以暂时禁用约束并仍然删除? 问题答案: 尝试或 确保

  • 我想暂时禁用整个应用程序的Spring Security性,但我总是被403禁止 删除控制器中的@PreAuthorize注释不会给出任何结果。未使用此注释标记的endpoint也会丢弃我 403 禁止 我不需要基本身份验证 我不需要身份验证 我的Spring Security配置:(/,/api/**,/**,**不工作,我总是得到403禁止) 我的一个控制者:

  • 问题内容: 我有一个包含大量内容的HTML,并且在加载HTML后就会出现一个垂直滚动条。现在,从此HTML中加载了全屏IFRAME。问题是当加载IFRAME时,父滚动条仍然存在,我想在加载Iframe时禁用滚动条。 我试过了: ,它不适用于FF和chrome。 之后,我仍然可以滚动,整个iframe会向上滚动以显示父HTML。 我的要求是,在加载IFRAME时,如果父HTML具有滚动条,则我们永远

  • 问题内容: 嗨,当我将元素悬停在某个元素上时,可以不使用而禁用窗口滚动吗? 我试过了 我的意思是,我想使滚动条保持可见状态,但是当我从鼠标移出该元素时,窗口不会滚动,而我移过的元素可以滚动 所以禁用滚动的身体,但不为元素我没有使用CSS结束 问题答案: 尝试处理除一个节点以外的所有节点上的“ mousewheel”事件