mousemove

您正在阅读此内容的英文版本,因为该语系尚未翻译。 帮助我们翻译此文章吧!

当指针设备( 通常指鼠标 )在元素上移动时, mousemove 事件被触发。

基本信息

是否冒泡 Yes
是否可取消 Yes
接口 MouseEvent
事件处理 onmousemove

属性

任何描述为“Read only”的属性意味着用户不能改变。

Property Type Description
target 只读 EventTarget The event target (the topmost target in the DOM tree).
type 只读 DOMString The type of event.
bubbles 只读 Boolean Whether the event normally bubbles or not
cancelable 只读 Boolean Whether the event is cancellable or not?
view 只读 WindowProxy document.defaultView (window of the document)
detail 只读 long (float) A count of consecutive clicks that happened in a short amount of time, incremented by one.
currentTarget 只读 EventTarget The node that had the event listener attached.
relatedTarget 只读 EventTarget For mouseover, mouseout, mouseenter and mouseleave events: the target of the complementary event (the mouseleave target in the case of a mouseenter event). null otherwise.
screenX 只读 long The X coordinate of the mouse pointer in global (screen) coordinates.
screenY 只读 long The Y coordinate of the mouse pointer in global (screen) coordinates.
clientX 只读 long The X coordinate of the mouse pointer in local (DOM content) coordinates.
clientY 只读 long The Y coordinate of the mouse pointer in local (DOM content) coordinates.
button 只读 unsigned short The button number that was pressed when the mouse event was fired: Left button=0, middle button=1 (if present), right button=2. For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left.
buttons 只读 unsigned short The buttons being pressed when the mouse event was fired: Left button=1, Right button=2, Middle (wheel) button=4, 4th button (typically, "Browser Back" button)=8, 5th button (typically, "Browser Forward" button)=16. If two or more buttons are pressed, returns the logical sum of the values. E.g., if Left button and Right button are pressed, returns 3 (=1 | 2). More info.
mozPressure 只读 float The amount of pressure applied to a touch or tabdevice when generating the event; this value ranges between 0.0 (minimum pressure) and 1.0 (maximum pressure).
ctrlKey 只读 boolean true if the control key was down when the event was fired. false otherwise.
shiftKey 只读 boolean true if the shift key was down when the event was fired. false otherwise.
altKey 只读 boolean true if the alt key was down when the event was fired. false otherwise.
metaKey 只读 boolean true if the meta key was down when the event was fired. false otherwise.

例子

The following example uses the mousedown, mousemove, and mouseup events to allow the user to draw on an HTML5 canvas. Its functionality is simple: the thickness of the line is set to 1, and the color is always black.

When the page loads, constants myPics and context are created to store a reference to the canvas and the 2d context we will use to draw. Finally, the constant rect is created to store the coordinates of the canvas relative to the page.

Drawing begins when the mousedown event fires. First we store the x and y coordinates of the mouse pointer in the variables x and y, and then set isDrawing to true.

As the mouse moves over the page, the mousemove event fires. If isDrawing is true, the event handler calls the drawLine function to draw a line from the stored x and y values to the current location. (Remember, the current x and y values are modified using the rect constant to adjust the coordinates so they are relative to the upper-left of the canvas.)

When the drawLine() function returns, we adjust the coordinates and then save them in x and y.

The mouseup event draws the final line segment, sets x and y to 0, and stops further drawing by setting isDrawing to false.

HTML

<h1>Drawing with mouse events</h1>
<canvas id="myPics" width="560" height="360"></canvas>

CSS

canvas {
  border: 1px solid black;
  width: 560px;
  height: 360px;
}

JavaScript

// When true, moving the mouse draws on the canvas
let isDrawing = false;
let x = 0;
let y = 0;

const myPics = document.getElementById('myPics');
const context = myPics.getContext('2d');

// The x and y offset of the canvas from the edge of the page
const rect = myPics.getBoundingClientRect();

// Add the event listeners for mousedown, mousemove, and mouseup
myPics.addEventListener('mousedown', e => {
  x = e.clientX - rect.left;
  y = e.clientY - rect.top;
  isDrawing = true;
});

myPics.addEventListener('mousemove', e => {
  if (isDrawing === true) {
    drawLine(context, x, y, e.clientX - rect.left, e.clientY - rect.top);
    x = e.clientX - rect.left;
    y = e.clientY - rect.top;
  }
});

window.addEventListener('mouseup', e => {
  if (isDrawing === true) {
    drawLine(context, x, y, e.clientX - rect.left, e.clientY - rect.top);
    x = 0;
    y = 0;
    isDrawing = false;
  }
});

function drawLine(context, x1, y1, x2, y2) {
  context.beginPath();
  context.strokeStyle = 'black';
  context.lineWidth = 1;
  context.moveTo(x1, y1);
  context.lineTo(x2, y2);
  context.stroke();
  context.closePath();
}

浏览器兼容性

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
mousemove eventChrome Full support YesEdge Full support YesFirefox Full support YesIE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support YesOpera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes

Legend

Full support  
Full support

See also