2009-12-18 61 views
9

背景:我创建了一个让人想起whenisgood.net的表格,因为它具有单击 - 拖动切换表格元素的功能。当左,中,右鼠标按钮激活mousedown事件时,我想调用不同类型的切换代码。使用javascript禁止中点击滚动

通过使用JQuery,我得到了一个良好的开端。

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

toggle()功能,我可以使用e.which确定单击哪个按钮。

点睛之笔:我用e.preventDefault()希望将停止滚动的中间点击默认行为。它没有。 如何才能停止滚动操作?

"Triggering onclick event using middle click"

回答

3

目前,我的解决办法是这样的:(!更多的jQuery)

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

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

当你中间点击的时候,Firefox会打开一个新的标签,但只有在你不拖动的时候。当您中途点击,拖动或不拖动时,Opera会打开一个新标签页。这就是为什么我使用href='javascript:void(0);'而不是仅仅是href='#' - 因此,客户端的浏览器不会加载整个页面,只是一个带有奇怪URL的空白页面。

但是这个解决方案在Chrome和Safari上就像一个魅力。它适用于IE8,除了现在当我左键单击n-drag时,它将指针更改为“无法做到”符号,因为它认为我想将链接拖到某个地方。未经旧版IE测试。

12

Middle-click can be disabled with Javascript见,但只有在IE,WebKit的,和konquerer中。 Firefox需要配置文件编辑。这是2017年和Firefox 50支持这一点。

+5

+1那只是搞笑。 – czarchaic 2009-12-19 02:55:44

+0

+1伟大的链接:充满了信息。这是测试页面(http://unixpapa.com/js/testmouse.html)激发了我对当前解决方案的启发。 – 2009-12-30 23:11:29

2

它已经有点老了,但我努力绕过这个Firefox(我仍然使用3.6),我会分享我的发现,也许有人会发现它有帮助。

检查您是否创建了一个空的HTML文件(或带有几段文字的小文档)并将其加载到Firefox中,则不会出现中间单击滚动条。这是因为<body>的宽度和高度比窗口大小小。如果你投入很多<br>'s,情况并非如此,滚动条出现在中间点击。

谷歌设法防止中间点击滚轮通过确保(通过JS),其<body>大小总是小于窗口的大小,再加上额外投入 <body style="overflow:hidden;">在谷歌地图出现在Firefox浏览器。

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

4

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

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

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

我可以确认这适用于IE 11,Chrome和Firefox。 – emilhem 2015-08-04 15:03:11