.mousemove()

.mousemove( handler )返回类型:jQuery

描述:Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element.

此方法在前两种变体中是.on( "mousemove", handler )的简写,在第三种变体中是.trigger( "mousemove" )的简写。

当鼠标指针在元素内部移动时,mousemove事件发送到元素上。任何HTML元素都可以接收此事件。

例如:考虑以下HTML:

1
2
3
4
5
6
7
<div id="target">
Move here
</div>
<div id="other">
Trigger the handler
</div>
<div id="log"></div>

此事件处理函数可以绑定到目标:

1
2
3
4
5
$( "#target" ).mousemove(function( event ) {
var msg = "Handler for .mousemove() called at ";
msg += event.pageX + ", " + event.pageY;
$( "#log" ).append( "<div>" + msg + "</div>" );
});

现在,当鼠标指针在目标按钮内移动时,消息追加到<div id="log">后面:

Handler for .mousemove() called at (399, 48)
Handler for .mousemove() called at (398, 46)
Handler for .mousemove() called at (397, 44)
Handler for .mousemove() called at (396, 42)

若要手工触发事件,请不带参数地应用.mousemove()

1
2
3
$( "#other" ).click(function() {
$( "#target" ).mousemove();
});

代码执行之后,点击触发器按钮也将追加此消息:

Handler for .mousemove() called at (undefined, undefined)

在跟踪鼠标运动时,你通常需要知道鼠标指针的实际位置。传递给处理器的事件对象包含了一些关于鼠标坐标的信息。可用一些属性,譬如.clientX.offsetX.pageX,但是在不同的浏览器中对它们的支持有所不同。幸运的是,jQuery规范化了.pageX属性和.pageY属性,从而它们可以用于所有浏览器。这些属性提供了相对于文档左上角的鼠标指针的X坐标和Y坐标,如下面的示例输出所演示的。

请记住,每当鼠标指针移动时,哪怕移动一像素,也会触发mousemove事件。这意味着短时间内可能生成几百次事件。如果处理函数必须做显著的处理,或者如果对该事件存在多个处理函数,这可能造成浏览器的严重的性能问题。然而,重要的是尽可能优化mousemove 处理函数,一旦不再需要,就立即解绑它们。

一个常见的模式是把mousemove处理函数绑定在mousedown处理函数内部,并在对应的mouseup处理函数上解绑它。如果实现这一系列事件,请记住mouseup事件可能发送到与mousemove事件不同的HTML元素。为了解决这个问题,mouseup处理函数通常应该绑定到DOM树的最高级,譬如<body>元素上。

补充说明:

  • 因为.mousemove()方法是.on( "mousemove", handler )的简写,所以可以用.off( "mousemove" )来分离。

示例:

当鼠标在黄色<div>上移动时,显示鼠标坐标。坐标相对于窗口,在此情况中是该嵌入框架。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>mousemove demo</title>
<style>
div {
width: 220px;
height: 170px;
margin: 10px 50px 10px 10px;
background: yellow;
border: 2px groove;
float: right;
}
p {
margin: 0;
margin-left: 10px;
color: red;
width: 220px;
height: 120px;
padding-top: 70px;
float: left;
font-size: 14px;
}
span {
display: block;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>
<span>Move the mouse over the div.</span>
<span>&nbsp;</span>
</p>
<div></div>
<script>
$( "div" ).mousemove(function( event ) {
var pageCoords = "( " + event.pageX + ", " + event.pageY + " )";
var clientCoords = "( " + event.clientX + ", " + event.clientY + " )";
$( "span:first" ).text( "( event.pageX, event.pageY ) : " + pageCoords );
$( "span:last" ).text( "( event.clientX, event.clientY ) : " + clientCoords );
});
</script>
</body>
</html>

演示: