Javascript 为什么我会得到一个罐头';在基于画布的游戏中拖动IE中的图像符号

Javascript 为什么我会得到一个罐头';在基于画布的游戏中拖动IE中的图像符号,javascript,html,canvas,drag-and-drop,Javascript,Html,Canvas,Drag And Drop,我正在使用HTML5画布制作一个游戏。在Internet Explorer中拖放时会出现一些奇怪的行为。它在大多数情况下都能工作,但大约十分之一的时候它会显示“不能拖动”图像符号(带十字的小圆圈)。发生这种情况后,当我松开鼠标按钮时,图像将跳转到位,然后它会跟随鼠标四处移动,尽管鼠标按钮处于上升状态,就像从未发生过mouseup事件一样。这在任何其他浏览器中都不会发生,这让我觉得这不是我实现拖放的方式 我不明白为什么它会显示这个符号,即使我的拖放代码有问题。它怎么知道我在试图拖动图像?以前有人经

我正在使用HTML5画布制作一个游戏。在Internet Explorer中拖放时会出现一些奇怪的行为。它在大多数情况下都能工作,但大约十分之一的时候它会显示“不能拖动”图像符号(带十字的小圆圈)。发生这种情况后,当我松开鼠标按钮时,图像将跳转到位,然后它会跟随鼠标四处移动,尽管鼠标按钮处于上升状态,就像从未发生过
mouseup
事件一样。这在任何其他浏览器中都不会发生,这让我觉得这不是我实现拖放的方式

我不明白为什么它会显示这个符号,即使我的拖放代码有问题。它怎么知道我在试图拖动图像?以前有人经历过这种情况吗?你对此做了什么

我不认为有必要发布任何代码,因为这只是标准的拖放操作,尽管我有自己的输入类,所以看起来可能很混乱。但我现在要谈一些细节

如果按下鼠标,我会检查它是否在可拖动的图像上。如果是下一次移动鼠标时,鼠标按钮仍然向下,则图像将移动到鼠标的新位置减去偏移量


我在每次释放鼠标时删除鼠标移动事件侦听器,并在每次按下鼠标按钮时添加事件侦听器。我将每个mousedown和mouseup事件存储在一个数组中,并在每个帧上循环事件以设置适当的标志。(
wasPressed
wasleased
isDown
等)我只存储最近的mousemove事件。然后我从我的游戏循环中查询这些标志。

确保不让任何事件冒泡,通常这意味着调用
e.preventDefault()鼠标上的DWN/move/up事件

此外,您应该防止在画布上进行选择,这将停止一些拖动和双击错误:


canvas.addEventListener('selectstart',函数(e){e.preventDefault();返回false;},false)

是否取消默认的拖放/选择事件?我没有。我该怎么做?编辑:我现在尝试在每个鼠标事件上使用preventDefault()。我来看看这是否奏效。好吧,成功了,现在一切正常。谢谢你的帮助!谢谢你的回复。preventDefault()方法解决了这个问题。