使用javascript禁用中间点击滚动

时间:2009-12-18 21:48:51

标签: javascript jquery javascript-events scroll

背景:我正在创建一个让人想起whenisgood.net的表格,因为它对表格元素进行了单击 - 拖动切换。当左,中,右鼠标按钮激活mousedown事件时,我想调用不同类型的切换代码。

通过使用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"

4 个答案:

答案 0 :(得分:12)

Middle-click can be disabled with Javascript,但仅限于IE,WebKit和Konquerer。 Firefox需要配置文件编辑。这是2017年,firefox 50支持此功能。

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:3)

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

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

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

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

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

答案 3 :(得分:2)

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

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

Google设法通过确保(通过JS)<body>大小始终小于窗口大小,以及另外放置,防止中间点击滚动条出现在Firefox中的Google地图中 <body style="overflow:hidden;">

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