返回值:jQuerymousemove(handler(eventObject))
Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element.
-
1.0 新增mousemove(handler(eventObject))
handler(eventObject) (Function) 每当事件触发时执行的函数。 -
1.4.3 新增mousemove([eventData], handler(eventObject))
eventData (Object) 可选参数,将要传递给事件处理函数的数据映射。handler(eventObject) (Function) 每当事件触发时执行的函数。 -
1.0 新增mousemove()
This method is a shortcut for .bind('mousemove', handler)
in the first variation, and .trigger('mousemove')
in the second.
The mousemove
event is sent to an element when the mouse pointer moves inside the element. Any HTML element can receive this event.
For example, consider the HTML:
<div id="target"> Move here </div> <div id="other"> Trigger the handler </div> <div id="log"></div>
The event handler can be bound to the target:
$('#target').mousemove(function(event) { var msg = 'Handler for .mousemove() called at ' + event.pageX + ', ' + event.pageY; $('#log').append('<div> + msg + '</div>'); });
Now when the mouse pointer moves within the target button, the messages are appended to <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)
We can also trigger the event when the second button is clicked:
$('#other').click(function() { $('#target').mousemove(); });
After this code executes, clicks on the Trigger button will also append the message:
Handler for .mousemove() called at (undefined, undefined)
When tracking mouse movement, we usually need to know the actual position of the mouse pointer. The event object that is passed
to the handler contains some information about the mouse coordinates. Properties such as .clientX
, .offsetX
, and .pageX
are available, but support for them differs between browsers. Fortunately, jQuery normalizes the .pageX
and .pageY
attributes so that they can be used in all browsers. These attributes provide the X and Y coordinates of the mouse pointer
relative to the top-left corner of the page, as illustrated in the example output above.
We need to remember that the mousemove
event is triggered whenever the mouse pointer moves, even for a pixel. This means that hundreds of events can be generated
over a very small amount of time. If the handler has to do any significant processing, or if multiple handlers for the event
exist, this can be a serious performance drain on the browser. It is important, therefore, to optimize mousemove
handlers as much as possible, and to unbind them as soon as they are no longer needed.
A common pattern is to bind the mousemove
handler from within a mousedown
hander, and to unbind it from a corresponding mouseup
handler. If implementing this sequence of events, remember that the mouseup
event might be sent to a different HTML element than the mousemove
event was. To account for this, the mouseup
handler should typically be bound to an element high up in the DOM tree, such as <body>
.
示例:
Show the mouse coordinates when the mouse is moved over the yellow div. Coordinates are relative to the window, which in this case is the iframe.
<!DOCTYPE html>
<html>
<head>
<style>
div { width:220px; height:170px; margin;10px; margin-right:50px;
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="jquery.min.js"></script>
</head>
<body>
<p>
Try scrolling too.
<span>Move the mouse over the div.</span>
<span> </span>
</p>
<div></div>
<script>
$("div").mousemove(function(e){
var pageCoords = "( " + e.pageX + ", " + e.pageY + " )";
var clientCoords = "( " + e.clientX + ", " + e.clientY + " )";
$("span:first").text("( e.pageX, e.pageY ) - " + pageCoords);
$("span:last").text("( e.clientX, e.clientY ) - " + clientCoords);
});
</script>
</body>
</html>