Element: mousemove event
The mousemove
event is fired at an element when a pointing device (usually a mouse) is moved while the cursor's hotspot is inside it.
Bubbles | Yes |
---|---|
Cancelable | Yes |
Interface | MouseEvent |
Event handler property | onmousemove |
Examples
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.
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.
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'); // event.offsetX, event.offsetY gives the (x,y) offset from the edge of the canvas. // Add the event listeners for mousedown, mousemove, and mouseup myPics.addEventListener('mousedown', e => { x = e.offsetX; y = e.offsetY; isDrawing = true; }); myPics.addEventListener('mousemove', e => { if (isDrawing === true) { drawLine(context, x, y, e.offsetX, e.offsetY); x = e.offsetX; y = e.offsetY; } }); window.addEventListener('mouseup', e => { if (isDrawing === true) { drawLine(context, x, y, e.offsetX, e.offsetY); 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(); }
Result
Specifications
Specification |
---|
UI Events # event-type-mousemove |
Browser compatibility
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
mousemove_event |
2 |
12 |
6 |
9 |
11.6 |
4 |
≤37 |
18 |
6 |
12.1 |
3.2 |
1.0 |
See also
- Introduction to events
mousedown
mouseup
click
dblclick
mouseover
mouseout
mouseenter
mouseleave
contextmenu
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Element/mousemove_event