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()希望将停止滚动的中间点击默认行为.它没有.我该怎么做才能阻止滚动动作激活?
这是一个老问题...但如果我正确理解它,你想通过鼠标中键点击禁用滚动.
如今,你可以用一行香草JS来做到这一点:
document.body.onmousedown = function(e) { if (e.button === 1) return false; }
Run Code Online (Sandbox Code Playgroud)
目前,我的解决方案是这样的:(更多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 上进行测试。