如何在画布上为对象编写“拖动”事件?

时间:2013-07-03 15:38:24

标签: javascript html5 canvas mouseevent drag

(我纠正了mousedown事情......)

我想要实现的是在画布上拖动一个球,然后球将跟随鼠标并改变其颜色。

鼠标一旦释放,它的颜色就会变回原来的状态。

我使用“休息”,因为一次只能拖动一个球。

现在的问题是,

  1. “拖动”似乎很奇怪,似乎“拖动”第一个球,但只有鼠标移动(没有鼠标按下)在第一个球之后就可以了。
  2. 颜色不会改变
  3. 下面的主要功能(完整代码 http://jsfiddle.net/nyTkU/1/):

    var mousePress = false;
    var mouseEvent = function(){
    
    $(canvas).mousedown(function(e){
    
        mousePress = true;
    
        $(canvas).mousemove(function(e){
    
                for(var i=0;i<figureNum;i++){
    
                    var distX=e.pageX-balls[i].x;
                    var distY=e.pageY-balls[i].y;
                    var distance = Math.sqrt((distX*distX)+(distY*distY));
    
                    if(distance<=20){
                        balls[i].x=e.pageX;
                        balls[i].y=e.pageY;
                        if(mousePress){
                           balls[i].c="#F05133";
                        }
    
    
                        break;
                    }
    
                    //else{balls[i].c="#FFED79";}
    
            }
        });
    });
    
    
    $(canvas).mouseup(function(e){
    
        mousePress=false;
    
        //for(var i=0;i<figureNum;i++){
    
        //  balls[i].c="#FFED79";
    
        //}
    })
    
    setTimeout(animate,speedMouse);
       }
    

    非常感谢。

1 个答案:

答案 0 :(得分:1)

你有两个mouseDown事件......也许第二个应该是mouseUp?

我仍然对你想要的功能感到困惑。你是否希望球只在mouseDown = true时移动,或者如果一次点击它就会移动球?因为你应该在第二种情况下使用click()处理程序。

你的mouseMove看起来也很奇怪......你是否试图让任何球在一定距离D内绑定到鼠标坐标?这会产生一些奇怪的行为。

最好的方法是:

1)在mouseDown上,检测是否已选择球并保存该ID。 (设置mousePressed = true)

2)在mouseMove上,如果mousePressed = true&amp;&amp;选择球,将球绑定到鼠标坐标。不要以任何速度更新()这个球。

3)在mouseUp上,设置mousePressed = false并清除任何选定的Ball