我尝试从json文件加载我的简单阶段,我加载图像,但是图像全部在一层中,并且图像不在组中,因此调整大小不起作用,我不知道如何加载带有图层和组的所有元素;

这是我要加载的函数(目前仅是图像)

   function load(loadStage) {
    counter = 2;
    activeStage = stage;
    stage = Kinetic.Node.create(loadStage,'right');
    var background = stage.get('.background');
    var backgroundImage = stage.get('.backgroundImage');
    var clipartsImage = stage.get('.image');
    var text = stage.get('.text');
    console.log(stage.getChildren());


   for(i=0;i<clipartsImage.length;i++){
     counter++;
      (function() {

          var image = clipartsImage[i];
          groups[counter] = image.parent.get;
          //console.log(image);
          var imageObj = new Image();
          imageObj.onload = function() {
              imageObj.src = image.attrs.src;
              console.log(image);
              image.setImage(imageObj);

              image.on('mouseover', function() {
                  document.body.style.cursor = 'pointer';
              });
              image.on('mouseout', function() {
                  document.body.style.cursor = 'default';
              });

              image.on('click', function(evt) {
                  this.children[0].children[3].show();
                  var shape = evt.targetNode;
                  this.moveToTop();
                  active = layers[shape.getId()];
                  objectId = shape.getId();
              });
              image.getLayer().draw;
          };
          imageObj.src = image.attrs.src;
      })();

      stage.draw();
    }
    stage.draw();
}


这是我的json文件,http://wklej.org/id/1105520/这是中间阶段。我会继续努力,但是如果有人遇到类似问题并解决了问题,我将非常感谢您的帮助:)

最佳答案

1)

JSON文件怎么了? base64字符串已爆炸成一百万行...

首先,KineticJS.Layer不能将图层作为子图层。参考文献:

https://github.com/ericdrowell/KineticJS/wiki/Change-Log#455-july-28-2013


  新的add()验证。如果将无效的子级添加到父级,例如在将层添加到另一层时,将引发错误。


https://github.com/ericdrowell/KineticJS/wiki

KineticJS event not fired for child of a grouped layer

在您的JSON文件中,彼此之间有成千上万的层,这肯定会引起问题。实际上,您似乎拥有每个EACH组的图层!这是完全错误的KineticJS结构。

您应该研究如何以及何时使用图层和组,这里有一些参考资料:

What are the differences between group and layer in KineticJs

https://github.com/ericdrowell/KineticJS/wiki(同样是KineticJS的数据结构层次结构)

2)

无需两次调用stage.draw()

3)

JSON是一种数据格式,它仅存储对象属性。这意味着它不存储对附加到对象的事件的任何引用。

这意味着,当您加载JSON字符串时,必须再次将updateAnchor函数重新绑定到所有锚点。 (类似于将click函数重新绑定到图像加载的方式)

使用JSON文件创建阶段之后,您必须在load函数中执行以下操作:

var children = layer.getChildren(); //Use the layer that has all your groups with images/anchors. *REMEMBER you can't layers within layers!

for (var i=0; i<children.length; i++) {
  //If name starts with 'anchor'
  if (children.getName().indexOf('anchor') !== -1) {
    children[i].on('dragmove', function(evt) {
      updateAnchor(this);
      layer.draw();
    });
  }
}

关于javascript - 用dynamicjs中的所有元素加载阶段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18166220/

10-12 07:15