我试图检测用户在 jQuery 下的 mousemove 事件期间按下哪个鼠标按钮(如果有),但我得到的结果不明确:
no button pressed: e.which = 1 e.button = 0
left button pressed: e.which = 1 e.button = 0
middle button pressed: e.which = 2 e.button = 1
right button pressed: e.which = 3 e.button = 2
Code:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<input id="whichkey" value="type something">
<div id="log"></div>
<script>$('#whichkey').bind('mousemove',function(e){
$('#log').html(e.which + ' : ' + e.button );
}); </script>
</body>
</html>
如何区分按下鼠标左键和根本没有按下鼠标左键?
您可以编写一些代码来跟踪鼠标左键的状态,并且通过一个小函数您可以在mousemove
event.
要跟踪 LMB 的状态,请将事件绑定到文档级别mousedown
and mouseup
并检查e.which
设置或清除标志。
预处理是由tweakMouseMoveEvent()
我的代码中的函数。要支持 IE 版本 e.which本来是1(无按钮或LMB)并且左键当前状态没有按下,只是设置e.which
to 0
,并将其用于您的其余部分mousemove
检查是否没有按下任何按钮的事件。
The mousemove
我的示例中的处理程序只是调用传递当前事件变量的调整函数,然后输出e.which
.
$(function() {
var leftButtonDown = false;
$(document).mousedown(function(e){
// Left mouse button was pressed, set flag
if(e.which === 1) leftButtonDown = true;
});
$(document).mouseup(function(e){
// Left mouse button was released, clear flag
if(e.which === 1) leftButtonDown = false;
});
function tweakMouseMoveEvent(e){
// Check from jQuery UI for IE versions < 9
if ($.browser.msie && !e.button && !(document.documentMode >= 9)) {
leftButtonDown = false;
}
// If left button is not set, set which to 0
// This indicates no buttons pressed
if(e.which === 1 && !leftButtonDown) e.which = 0;
}
$(document).mousemove(function(e) {
// Call the tweak function to check for LMB and set correct e.which
tweakMouseMoveEvent(e);
$('body').text('which: ' + e.which);
});
});
在这里尝试现场演示:http://jsfiddle.net/G5Xr2/ http://jsfiddle.net/G5Xr2/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)