在 mousemove() 事件处理程序中按下了哪个鼠标键?

Ale*_*ack 5 javascript jquery dom

我使用 JQuery 1.7 来处理事件。

function objToStr(obj) {
    return ...string representation of the object
}
$slider.mousedown(function(e) {
    console.log("$slider.mousedown:\n" + objToStr(e) );
});

$slider.mousemove( function(e) {
    console.log("$slider.mousemove:\n" + objToStr(e) );
});
Run Code Online (Sandbox Code Playgroud)

这是结果:

$slider.mousedown: 
altKey = false
 attrChange = undefined 
attrName = undefined 
bubbles = true 
button = 0 
buttons = undefined 
cancelable = true 
clientX = 319 
clientY = 13 
ctrlKey = false 
currentTarget = object 
data = null 
delegateTarget = object 
eventPhase = 3 
fromElement = undefined 
handleObj = object
isDefaultPrevented = (function) 
isImmediatePropagationStopped = (function) 
isPropagationStopped = (function) 
jQuery17209754494933906718 = true 
metaKey = false 
offsetX = undefined 
offsetY = undefined 
originalEvent = object 
pageX = 319 
pageY = 13 
preventDefault = (function) 
relatedNode = undefined 
relatedTarget = null 
screenX = 2876 
screenY = 223 
shiftKey = false 
srcElement = undefined 
stopImmediatePropagation = (function) 
stopPropagation = (function) 
target = object 
timeStamp = 869699957 
toElement = undefined 
type = "mousedown" 
view = object 
which = 1


$slider.mousemove: 
currentTarget = object
data = null 
delegateTarget = object 
exclusive = undefined 
handleObj = object 
isDefaultPrevented = (function) 
isImmediatePropagationStopped = (function) 
isPropagationStopped = (function) 
isTrigger = true 
jQuery17209754494933906718 = true 
namespace = "" 
namespace_re = null 
preventDefault = (function) 
result = undefined 
stopImmediatePropagation = (function) 
stopPropagation = (function) 
target = object 
timeStamp = 1334151903323 
type = "mousemove"
Run Code Online (Sandbox Code Playgroud)

我需要访问e.whichmousemove显然它没有传递给事件处理程序?

我不想使用jQuery: Detecting Pressed mouse button during mousemove event中建议的标志算法。因为如果用户将鼠标按钮拖动到浏览器窗口之外并在那里释放,那么当鼠标返回到浏览器窗口时,仍然认为它被按下。然后我还必须添加鼠标离开窗口时的处理程序,这太多了。有没有更简单的方法来知道在 的 事件处理程序中按下了哪个鼠标按钮?mousemove()

Dom*_*nic 3

我想因为它是一个移动事件,所以不认为找出当时按下的键是最重要或有效的,特别是因为该事件被频繁触发。mouseup所以你需要为和举办一个活动mousedown

var leftMButtonDown = false;

$slider.mousedown(function(e) {
    if(e.which === 1) leftMButtonDown = true;
});

$(document).mouseup(function(e) {
    if(leftMButtonDown && e.which === 1) leftMButtonDown = false;
});

$slider.mousemove(function(e) {
    if(leftMButtonDown == true) {
        console.log('Left mouse button was down on mousemove event');
    }
});
Run Code Online (Sandbox Code Playgroud)

你必须为鼠标右键等添加更多变量

  • 如果用户在滑块内部单击并将鼠标拖动到其外部并释放那里的按钮,则 $slider.mouseup() 将不会启动。这是导致我在这里问这个问题的主要问题。 (4认同)