我正在使用Mac触控板。如何防止水平滚动时页面返回到之前浏览过的页面?
我尝试了阻止滚轮事件,但大部分时间都不起作用。
container.addEventListener('wheel', function(ev) {
ev.preventDefault();
ev.stopPropagation();
return false;
}, {passive: false, capture: true});
甚至我尝试了使用鼠标滚轮事件来阻止页面导航。
我正在使用Mac触控板。如何防止水平滚动时页面返回到之前浏览过的页面?
我尝试了阻止滚轮事件,但大部分时间都不起作用。
container.addEventListener('wheel', function(ev) {
ev.preventDefault();
ev.stopPropagation();
return false;
}, {passive: false, capture: true});
甚至我尝试了使用鼠标滚轮事件来阻止页面导航。
这与网页或其事件无关,这是特定的系统行为,我认为它无法从javascript层面被阻止。
如果您想要禁用它 - 转到:苹果标志>偏好设置>触控板>更多手势
并取消选中在页面之间滑动
// 编辑
好的,我搜索了一下,似乎我错了 - 有一种解决方案,基本上非常简单:
document.body.addEventListener('mousewheel', function(e) {
e.stopPropagation();
var max = this.scrollWidth - this.offsetWidth; // this might change if you have dynamic content, perhaps some mutation observer will be useful here
if (this.scrollLeft + e.deltaX < 0 || this.scrollLeft + e.deltaX > max) {
e.preventDefault();
this.scrollLeft = Math.max(0, Math.min(max, this.scrollLeft + e.deltaX));
}
}, false);
刚在OSX Chrome 67上进行了测试
html {
overscroll-behavior-x: contain;
}
该功能在Chrome中进行了记录,请参考此处。
contain - 防止滚动链。 滚动不会传播到祖先节点,但节点内的局部效果将被显示。例如,在Android上的overscroll glow效果或iOS上的rubberbanding effect,它们会在用户到达滚动边界时通知用户。注意:在html元素上使用overscroll-behavior: contain将防止overscroll导航操作。
已在OSX上测试了Chrome版本77
注意:这仍然是一个非标准的CSS属性:https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior
html
上对我没有起作用,但是将其设置在 body
上就可以了。 - Busti