简体   繁体   English

KineticJS哪一层单击了?

[英]KineticJS which layer clicked?

I use KineticJS add images to layers. 我使用KineticJS将图像添加到图层。 I need to know which layer clicked. 我需要知道单击了哪一层。

This is jsfiddle: http://jsfiddle.net/yvp79ryf/1/ 这是jsfiddle: http : //jsfiddle.net/yvp79ryf/1/

If i clicked first image just need get alert clicked is first layers otherwise second layer 如果我单击了第一张图像,只需要单击警报即可,否则单击第二层

HTML HTML

<div id="container"></div>
<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.4.3.min.js"></script>
<script defer="defer">

JavaScript JavaScript的

  var stage = new Kinetic.Stage({
    container: 'container',
    width: 578,
    height: 200
  });


  var layer = new Kinetic.Layer();
  var imageObj = new Image();
  imageObj.onload = function() {
  var yoda = new Kinetic.Image({
      x: 140,
      y: stage.getHeight() / 2 - 59,
      image: imageObj,
      width: 106,
      height: 118
    });

    layer.add(yoda);
    stage.add(layer);

  };
  imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/yoda.jpg';



  var layer2 = new Kinetic.Layer();
  var imageObj2 = new Image();
  imageObj2.onload = function() {
  var filteredYoda = new Kinetic.Image({
      x: 280,
      y: stage.getHeight() / 2 - 59,
      image: imageObj2,
      width: 106,
      height: 118
    });

    layer2.add(filteredYoda);
    stage.add(layer2);
  };
  imageObj2.src = 'http://demo-stable-ofbiz.apache.org/images/products/GZ-1000/small.png';

If you click on an image, you can use .getLayer() to get a reference to the layer that your clicked image is on. 如果单击图像,则可以使用.getLayer()获取对单击图像所在图层的引用。

stage.on('click', function(e) {
    console.log('layer:',e.target.getLayer().id());
});

KineticJS does not listen for clicks on the empty part of a layer. KineticJS不会监听层的空白部分的点击。 Therefore, if you click on an empty part of the stage then you cannot tell which layer was clicked. 因此,如果单击舞台的空白部分,则无法确定单击了哪一层。 But since since layer2 is above layer then if you click on the empty part of the stage then you're always clicking on the top layer (layer2). 但自从layer2以上layer ,然后如果你点击在舞台上,然后你总是点击顶部层(二层)上的空白部分。

You need to set id to layers to identify them. 您需要将ID设置为图层以标识它们。

var layer = new Kinetic.Layer({id:1});
var layer2 = new Kinetic.Layer({id:2});

Add click event handler on stage 在舞台上添加点击事件处理程序

stage.on('click', function(e) {
    if(e.targetNode.parent.attrs.id == 1){
        alert('first layer');
    }else{
        alert('second layer');
    }
});

You can check layer id through the descendants 您可以通过后代检查图层ID

e is MouseEvent object. e是MouseEvent对象。

e.targetNode is Kinetic.Image e.targetNode是Kinetic.Image

e.targetNode.parent is Kinetic.Layer e.targetNode.parent是Kinetic.Layer

e.targetNode.parent.attrs.id is id of Kinetic.Layer e.targetNode.parent.attrs.id是Kinetic.Layer的ID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM