使用javascript禁用中间点击滚动

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

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

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

toggle()函数中,我可以使用e.which来确定单击了哪个按钮。

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

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

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

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

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

 document.body.onmousedown = function(e) { if (e.button === 1) return false; } 

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

 $(".togglable").wrap( "" ); 

通过将其包装在一个链接中(通过jquery包装 ),浏览器认为它是一个链接,即使你拖动鼠标也不要在中间点击滚动。 有了这个设置,我的情况,有几个(小)陷阱。

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

但这个解决方案就像Chrome和Safari上的魅力一样。 它适用于IE8,除了现在当我左键单击并拖动时,它将指针更改为“无法执行该操作”符号,因为它认为我想将链接拖到某处。 在较早版本的IE上未经测试。

它已经有点老了,但我已经努力在Firefox中绕过这个(我还在使用3.6)并且我将分享我的发现,也许有人会发现它有用。

检查如果您创建一个空的HTML文件(或包含几段的小文档)并在Firefox中加载它,则不会出现中间单击滚动条。 这是因为的宽度和高度小于窗口大小。 如果你放了很多
,那不是这种情况,中间点击会出现滚动条。

谷歌设法通过确保(通过JS) 大小始终小于窗口大小,以及另外放置来防止中间点击滚动显示在Firefox中的Google地图中。

这在一般情况下难以实现,但有时可能有用。