鼠标单击顶部图像

时间:2019-01-28 08:41:51

标签: javascript createjs mouseclick-event

我使用createjs(img1和img2在同一位置,但z索引不同)创建了两个以图像为源的形状。一个图像位于另一图像的顶部,即画布中img1上的img2。下面的图片具有点击事件,即img1具有正常运行的点击事件。但是当我在img1上启用img2(没有任何单击事件)时,鼠标单击事件会通过顶部图像工作。如果将点击事件添加到img2中,则它将正常工作。强制向每个图片添加点击事件以避免点击图片的行为。

代码:

[function test(){
        var btnContainer=new createjs.Container();
        btnContainer.mouseChildren=true;

        var shape = new createjs.Shape();        
        shape.graphics.clear().beginBitmapFill(loader.getResult("play-btn")).drawRect(0,0,291,98);//"no-repeat"
        shape.x=shape.y=200;
        shape.mouseEnabled =true;
        shape.addEventListener("click", playClick);


        var shape1 = new createjs.Shape();        
        shape1.graphics.clear().beginBitmapFill(loader.getResult("play-btn")).drawRect(0,0,291,98);//"no-repeat"
        shape1.x=shape1.y=250;
        shape1.mouseEnabled =true;
        shape1.addEventListener("click", playClickShape1);



        btnContainer.addChild(shape,shape1);


        gameStage.AddChildWidget(btnContainer);

    }


    function playClick(event)
    {
        console.log("\[playClick\] Start");
        ReadXMLFile();
    }
    function playClickShape1(event)
    {
        console.log("\[playClickShape1\] Start");
    }

2 个答案:

答案 0 :(得分:1)

如果某张图片叠加了其他内容(作为点击处理程序),则不会被注册,因为最上面的图片会阻止点击。它不会将点击传播到网站底部。尝试将pointer-events:none CSS规则添加到不想注册点击事件的顶部图像中,底部的CSS规则应该是可单击的。

答案 1 :(得分:0)

@Sebastian的答案对于DOM元素是正确的(使用CSS解决方案)。

如果两个图像都是Canvas中的位图(通过EaselJS),则存在类似的限制。任何带有“点击”事件的内容都会阻止点击以下元素。但是,与HTML不同,如果元素上没有鼠标事件,它将不会阻止鼠标事件(默认情况下,基本上是pointer-events:none

如果要确定是否在任何元素上发生了单击(无论是否分层),则可以侦听舞台上的单击,然后使用getObjectsUnderPoint()来确定单击的内容,然后可以检查是否有一个(或两者)都被点击了。

stage.on("stagemouseup", function(event) {
    var objs = stage.getObjectsUnderPoint(event.stageX, event.stageY);
    for (var i=0, l=objs.length; i<l; i++) {
      var obj = objs[i];
      if (obj == firstElement || obj == secondElement) { doSomething(); break; }
    }
);

文档: https://createjs.com/docs/easeljs/classes/Container.html#method_getObjectsUnderPoint