如何在easljs中阻止事件泡沫?

时间:2013-10-10 02:36:25

标签: javascript canvas html5-canvas easeljs

我在舞台上有一个mousedown事件监听器,在一个形状上有一个mousedown事件监听器。当我点击形状时,舞台上的mousedown事件监听器也会触发?怎么解决这个问题?

var stage = new createjs.Stage("test");
stage.addEventListener('stagemousedown',mouseDown);
var shape = new createjs.Shape();
shape.graphics.beginStroke("#000").setStrokeStyle(8,"round").drawRect(0, 0, 100, 100);
shape.addEventListener('mousedown',smouseDown);
stage.addChild(shape);

4 个答案:

答案 0 :(得分:4)

stagemousedown事件是一个特殊事件,无论点击什么,始终捕获阶段鼠标交互。如果您只想在未点击舞台上的孩子时接收该事件,则还有其他方法。

一个建议是添加一个舞台大小的舞台级别的孩子,并在其上监听鼠标事件。然后,您可以检查目标以查看点击(或未点击)的内容

var stage = new createjs.Stage("canvas");

var bg = new createjs.Shape();
bg.graphics.f("#ddd").dr(0,0,550,400);

var shape = new createjs.Shape().set({x:200,y:200});
shape.graphics.f("#f00").dc(0,0,100);

stage.addChild(bg, shape);
stage.update();

stage.addEventListener("mousedown", function(event){
    if (event.target == bg) {
        console.log("Missed Content");
    } else {
        console.log("Hit Content");
    }
});

答案 1 :(得分:0)

这是在舞台中移除形状对象的方法之一。

stage.removeChild(shape);

你可以把它放在一个函数中,只要你想删除它就调用它。

如果您需要,请告诉我。

答案 2 :(得分:0)

可能有一种更好的方法,但你可以检查当你抓住" stagemousedown"时,鼠标下是否有物体。事件:

function mouseDown(event) {
    if (stage.getObjectUnderPoint(event.stageX,event.stageY) == null) {
        // ...
    }
}

答案 3 :(得分:0)

我认为你要找的是stage.mouseEnabled = false

  

指示在运行鼠标时是否包含此对象   互动。对于Container的子项,将此设置为false将   单击该子项时,Container上的事件不会触发。   将此属性设置为false不会阻止   返回子进程的getObjectsUnderPoint方法。

但是,来自docs

  

注意:在EaselJS 0.7.0中,mouseEnabled属性不起作用   适当地使用嵌套容器。请查看最新的NEXT   GitHub中的版本已解决此问题的更新版本。该   修复将在EaselJS的下一个版本中提供。