Javascript 鼠标拖动的实现问题
我想实现一个包含某些元素的可拖动映射 -->参见JSFIDLE: 通过使用Javascript 鼠标拖动的实现问题,javascript,mouseevent,Javascript,Mouseevent,我想实现一个包含某些元素的可拖动映射 -->参见JSFIDLE: 通过使用mousedown,mousemove和mouseup我实现了拖动。 然而,我面临的问题是: 当按下鼠标按钮,然后移动到窗口外时,我没有得到mouseup事件。重新进入窗口(很久以前就释放了鼠标按钮)我的地图仍然认为按钮已按下,并相应地出现错误 当地图上有对象时,我在移动这些对象时不会得到mousemove事件。因此,当我进入和离开这样一个对象时,地图会挂起并跳跃 在这些对象上,我仍然希望有一个移动鼠标光标。我可以更改每个
mousedown
,mousemove
和mouseup
我实现了拖动。
然而,我面临的问题是:
mouseup
事件。重新进入窗口(很久以前就释放了鼠标按钮)我的地图仍然认为按钮已按下,并相应地出现错误mousemove
事件。因此,当我进入和离开这样一个对象时,地图会挂起并跳跃移动
鼠标光标。我可以更改每个对象上的光标
样式(在小提琴中,我为对象1做了这个示例),但这似乎不是一个好方法。有更优雅的解决方案吗离开
画布
时需要捕捉,例如mouseout
,但当光标移动到其他元素上时也会触发该事件
一个简单的解决方法是简单地将一个类添加到canvas
,在这些画布上设置指针事件:none
使用该类,您还可以控制光标,并避免使用脚本设置光标
堆栈片段
updateInfo=function(){
document.getElementById('info').innerHTML=
'Position='+JSON.stringify(Position)+
'
dragInfo='+JSON.stringify(dragInfo);
};
const canvas=document.getElementsByTagName('canvas')[0];
设位置={x:0,y:0};
设dragInfo=null;
updateInfo();
addEventListener('mousedown',函数(e){
dragInfo={
起始事件:{
x:e.clientX,
y:e.clientY,
},
起始位置:位置
};
canvas.classList.add('drawing');
updateInfo();
});
addEventListener('mousemove',函数(e){
if(dragInfo==null)返回;
职位={
x:dragInfo.startPosition.x-(e.clientX-dragInfo.startEvent.x),
y:dragInfo.startPosition.y-(e.clientY-dragInfo.startEvent.y)
};
updateInfo();
});
addEventListener('mouseup',函数(e){
dragInfo=null;
canvas.classList.remove('drawing');
updateInfo();
});
canvas.addEventListener('mouseout',函数(e){
dragInfo=null;
canvas.classList.remove('drawing');
updateInfo();
});代码>
*{
用户选择:无;
字体系列:monospace;
}
帆布{
背景:黑色;
边框:1px纯红;
}
.拖{
光标:移动;
}
B.obj{
位置:绝对位置;
宽度:50px;
高度:50px;
背景:绿色;
颜色:白色;
文本对齐:居中;
线高:50px;
字体大小:粗体;
}
.拖动~.obj{
指针事件:无;
}
1.
2.
3.
4.
我的答案中缺少了什么,或者你就是没有时间检查?@LGSon没有时间回答:-)很有魅力。特别有用的是mouseout
和mouseleave
之间的区别-我不知道。谢谢。。。结果很好:)