如何在HTML Canvas中实现click事件和拖动事件

时间:2015-04-20 13:51:50

标签: html canvas

我使用html canvas创建了一个商业工具。

它包含许多可以拖放的元素。我自己编写了这个功能,主要是说(伪代码):

if(mouseIsDown && mouseInBoundsOfIcon){
    icon.grabbed = true;
}

if(icon.grabbed){
    icon.x = mouseX;
    icon.y = mouseY;
}

现在,我希望其中一些图标能够实现onClick事件,使它们既可点击又可以拖动& amp;可投放'

问题是,只要我点击鼠标按钮(显然)就会触发mousedown事件。我想我可以使用短计时器,当mousedown触发mouseInBoundsOfIcon==true时,我可以启动它,当它达到0.5秒时例如icon.grabbed = true,否则如果按钮是发布它算作点击?

我不确定该怎么做。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

至少有两种区分点击和拖动的常用方法。

这两种方法都涉及在mousedown期间进行测量并将其与在mouseup或mousemove中进行的另一次测量进行比较。

  • 测量鼠标移动的距离。例如,如果它在mouseup之前移动超过5个像素,则表示拖动。

  • 测量mousedown和mouseup之间的时间。例如,如果鼠标在mousedown的200ms内发生,那么它就是一次点击。

有用的提示:将mousedown默认设为drag-start而不是click。开始拖动mousedown。如果您稍后确定用户想要点击一下,那么将图标放回到其起始位置,以便在打算点击时他们不会略微轻推图标。