我有一个svg矩形,其4个边上有4个resizer,矩形和resizer都有onmousedown / onmousemove / onmouseup事件监听器。当我从调整器调整矩形大小时,当我停止调整元素大小或者可能没有触发onmouseup时,大小调整器的onmousemove不会停止。这是我的代码:用于拖放的矩形事件: onMouseDown = (e) => {
if ( this.state.isDraggable ) {
document.addEventListener('mousemove', this.onMouseMove);
this.coords = {
x: e.clientX,
y: e.clientY
}
}
}
onMouseUp = (e) => {
// this.props.updateStateDragging(this.props.id, false);
document.removeEventListener('mousemove', this.onMouseMove);
this.coords = {};
}
onMouseMove = (e) => {
const xDiff = this.coords.x - e.clientX;
const yDiff = this.coords.y - e.clientY;
this.coords.x = e.clientX;
this.coords.y = e.clientY;
this.setState({
x: this.state.x - xDiff,
y: this.state.y - yDiff,
});
}用于调整矩形大小的缩放器事件: onMouseDown = (e) => {
document.addEventListener('mousemove', this.onMouseMove);
this.props.updateStateResizing(this.props.id, true);
this.props.updateStateDragging(this.props.id, false);
}
onMouseMove = (e) => {
if ( this.props.isResizing ){
this.props.nodeResizer(this.props.id, e.target, e.clientX, e.clientY);
}
}
onMouseUp = (e) => {
document.removeEventListener('mousemove', this.onMouseMove.bind(this));
if ( this.props.isResizing ){
this.props.updateStateResizing(this.props.id, false);
}
}我究竟做错了什么?怎么解决呢?
4 回答
![?](http://img1.sycdn.imooc.com/58e443010001a91401000100-100-100.jpg)
MDSN
TA贡献2条经验 获得超0个赞
onclick 事件会在一次完整的鼠标左键按下并松开之后触发, 一般 onmouseup 是先于 onclick 事件触发。
但是鼠标左键按下不松开,并移动鼠标之后松开鼠标左键,结果是 onmouseup 并不会触发。
利用 onclick 是在 onmouseup 之后触发的特点,用 onclick 替代 onmouseup
![?](http://img1.sycdn.imooc.com/58e443010001a91401000100-100-100.jpg)
MDSN
TA贡献2条经验 获得超0个赞
onclick 事件会在一次完整的鼠标左键按下并松开之后触发, 一般 onmouseup 是先于 onclick 事件触发。
但是鼠标左键按下不松开,并移动鼠标之后松开鼠标左键,结果是 onmouseup 并不会触发。
利用 onclick 是在 onmouseup 之后触发的特点,用 onclick 替代 onmouseup
![?](http://img1.sycdn.imooc.com/545845d30001ee8a02200220-100-100.jpg)
青春有我
TA贡献1784条经验 获得超8个赞
尝试使用settimeout,无论您在何处使用document.removeEventListener,如:
setTimeout(() => { document.removeEventListener('mousemove', this.onMouseMove.bind(this));}, 500);
添加回答
举报
0/150
提交
取消