无法阻止Mac上最新Chrome版本(59)中的导航手势

Jes*_*sse 3 javascript google-chrome gesture preventdefault macos-sierra

无法完全禁用双指轻扫手势来浏览整个网站的浏览器历史记录对我来说是一个持续的烦恼.到目前为止,至少可以通过在mousewheel事件上调用preventDefault()来防止这种行为.

这在Chrome 59中似乎不再起作用了.

以下是如何重现它:

  1. 在页面上的某个位置启动手势,然后取消它
  2. 从那以后,preventDefault没有任何效果.

有人有解决方案吗?

例子

当您在表视图中滚动时,Zenkit和Airtable都会调用preventDefault.它似乎首先工作,但一旦手势被识别,然后至少取消一次(在表格外,防止默认不被调用),防止手势不再起作用(甚至在表格内).因此,从那里开始,向桌面左侧滚动几乎是不可能的,因为它总是触发手势.

在Trello的看板视图中,只有当您位于卷轴的左边缘或右边缘时才会出现.但我想这是因为他们使用原生滚动而Zenkit和Airtable使用css翻译.

一旦用户开始滚动并在之后删除它,我尝试在内容的顶部创建一个不可见的滚动容器.这显着减少了问题,但并不适用于所有情况.

示例代码:https: //codepen.io/anon/pen/gRKaMX

这支笔有3个盒子.

  • 第一个使用overflow:scroll滚动本地.这里只有scrollLeft为0才能触发手势.

  • 第二个附加了一个事件监听器,它在每个mousewheel事件上调用preventDefault.这会首先阻止手势,但一旦您在页面上的任何其他位置启动它,它就不再起作用了.

  • 最后还有第三个div,你可以随时启动手势.

StackOverflow也希望我内联代码,所以这里是:

HTML:

 Native Scrolling:
<div id="native-scrolling" class="box">
  <div></div>
 </div>

Prevent gesture by calling prevent default. Only works if you didn't start the gesture anywhere else, yet:
<div id="prevent-gesture" class="box"></div>

Just a normal div:
<div class="box"></div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$('#prevent-gesture').on('mousewheel', function (event) {
  event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

CSS:

.box {
  height: 100px;
  width: 200px;
  background: black;
}

#native-scrolling {
  overflow: scroll;
}

#native-scrolling > div {
  width: 200%;
  height: 10px;
}
Run Code Online (Sandbox Code Playgroud)

先谢谢你,杰西

编辑:关于接受的答案

重新启动Chrome会暂时修复此问题但会不断恢复.我现在正在使用Chrom 69,但它仍然存在.

Phi*_*eck 6

你试过把它关掉再打开吗?