使用javascript禁用中间点击滚动

Dan*_*ton 9 javascript jquery scroll javascript-events

背景:我正在创建一个让人联想到whenisgood.net的表,因为它具有click-n-drag切换表元素.当左,中,右鼠标按钮激活mousedown事件时,我想调用不同类型的切换代码.

通过使用JQuery,我有一个良好的开端.

$(".togglable").bind("contextmenu", function() {return false;});
$(".togglable").bind("mousedown", function(e){
  e.preventDefault();
  toggle(this, e);
});
Run Code Online (Sandbox Code Playgroud)

toggle()我可以e.which用来确定点击了什么按钮的函数中.

妙语:我用e.preventDefault()希望将停止滚动的中间点击默认行为.它没有.我该怎么做才能阻止滚动动作激活?

另请参阅"使用中键单击触发onclick事件"

Jos*_*ola 12

可以使用Javascript禁用中键单击,但仅限于IE,WebKit和Konquerer.Firefox需要配置文件编辑.这是2017年,firefox 50支持这一点.


rne*_*ius 5

这是一个老问题...但如果我正确理解它,你想通过鼠标中键点击禁用滚动.

如今,你可以用一行香草JS来做到这一点:

document.body.onmousedown = function(e) { if (e.button === 1) return false; }
Run Code Online (Sandbox Code Playgroud)

  • 我可以确认这适用于 IE 11、Chrome 和 Firefox。 (2认同)

Dan*_*ton 3

目前,我的解决方案是这样的:(更多jquery!)

$(".togglable").wrap(
  "<a href='javascript:void(0);'
  onclick='return false;'></a>"
);
Run Code Online (Sandbox Code Playgroud)

通过将其包装在链接中(通过jquery wrap),浏览器会认为它是一个链接,并且即使您拖动鼠标,也不会在中键单击时滚动。通过这种设置和我的情况,有一些(小)问题。

当您单击鼠标中键时,Firefox 会打开一个新选项卡,但前提是您不拖动。当您单击鼠标中键、拖动或不拖动时,Opera 都会打开一个新选项卡。这就是为什么我使用href='javascript:void(0);'而不只是href='#'-- 这样客户端的浏览器就不会加载整个页面,而只是加载一个带有奇怪网址的空白页面。

但这个解决方案在 Chrome 和 Safari 上非常有效。它在 IE8 上工作得很好,除了现在当我左键单击并拖动时,它会将指针更改为“不能这样做”符号,因为它认为我想将链接拖动到某处。未在旧版 IE 上进行测试。