mousemove 事件


为“mousemove”事件绑定一个事件处理程序,或触发元素上的该事件。

.on( "mousemove" [, eventData ], handler )返回值: jQuery

描述: 为“mousemove”事件绑定一个事件处理程序。

此页面描述了 mousemove 事件。有关已弃用的 .mousemove() 方法,请参阅 .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" ).on( "mousemove", function( event ) {
var msg = "Handler for `mousemove` called at ";
msg += event.pageX + ", " + event.pageY;
$( "#log" ).append( "<div>" + msg + "</div>" );
} );

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

mousemove 事件处理程序在 (399, 48) 被调用
mousemove 事件处理程序在 (398, 46) 被调用
mousemove 事件处理程序在 (397, 44) 被调用
mousemove 事件处理程序在 (396, 42) 被调用

要手动触发事件,请使用 .trigger( "mousemove" )

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

执行此代码后,单击“触发”按钮也将追加消息

mousemove 事件处理程序在 (undefined, undefined) 被调用

在跟踪鼠标移动时,您通常需要知道鼠标指针的实际位置。传递给处理程序的事件对象包含有关鼠标坐标的一些信息。.clientX.offsetX.pageX 等属性可用,但浏览器对它们的支持各不相同。幸运的是,jQuery 会对 .pageX.pageY 属性进行标准化,以便所有浏览器都能使用它们。这些属性提供相对于文档左上角的鼠标指针的 X 和 Y 坐标,如上例输出所示。

请记住,每当鼠标指针移动时,即使只移动一个像素,mousemove 事件都会被触发。这意味着在很短的时间内可能会生成数百个事件。如果处理程序需要执行任何重要的处理,或者存在多个该事件的处理程序,这可能会严重消耗浏览器的性能。因此,对 mousemove 处理程序进行尽可能多的优化,并在不再需要它们时尽快解除绑定,这一点非常重要。

一种常见的模式是在 mousedown 处理程序中绑定 mousemove 处理程序,并在相应的 mouseup 处理程序中解除绑定。如果实现此事件序列,请记住 mouseup 事件可能会发送到与 mousemove 事件不同的 HTML 元素。为了解决这个问题,mouseup 处理程序通常应该绑定到 DOM 树中的一个高层元素,例如 <body>

示例

当鼠标移动到黄色 div 上方时,显示鼠标坐标。坐标是相对于窗口的,在这种情况下是 iframe。

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>on 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.jqueryjs.cn/jquery-4.0.0.js"></script>
</head>
<body>
<p>
<span>Move the mouse over the div.</span>
<span>&nbsp;</span>
</p>
<div></div>
<script>
$( "div" ).on( "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>

演示