要用鼠標移動一個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> ) } };