要用鼠标移动一个div首先要获取的是鼠标移动的事件。
有三个事件是须要的javascript
有了这三个事件,就能够得到鼠标完整的按下->移动->抬起完整的操做css
鼠标onMouseMove事件会获得不少的距离
这些都不是须要的,真正须要的距离是鼠标移动的距离dx和dy
那么咱们选取onMouseMove返回的其中的一组clientX和clientY来处理java
import React from 'react' export default class extends React.Component { constructor(props) { super(props); this.state = { translateX: 0, translateY: 0, }; this.moving = false; this.lastX = null; this.lastY = null; window.onmouseup = e => this.onMouseUp(e); window.onmousemove = e => this.onMouseMove(e); } onMouseDown(e) { e.stopPropagation(); this.moving = true; } onMouseUp() { this.moving = false; this.lastX = null; this.lastY = null; } onMouseMove(e) { this.moving && this.onMove(e); } onMove(e) { if(this.lastX && this.lastY) { let dx = e.clientX - this.lastX; let dy = e.clientY - this.lastY; this.setState({ translateX: this.state.translateX + dx, translateY: this.state.translateY + dy }) } this.lastX = e.clientX; this.lastY = e.clientY; } render() { return ( <div onMouseDown={e => this.onMouseDown(e)} style={{transform: `translateX(${this.state.translateX}px)translateY(${this.state.translateY}px)`}} > <div style={{ width: 100, height: 100, backgroundColor: 'blue' }} /> </div> ) } };