【问题标题】:Destroying multiple shapes on end of KonvaJS tween在 KonvaJS 补间结束时销毁多个形状
【发布时间】:2015-09-29 15:19:12
【问题描述】:

所以我有一个 for 循环生成、放置和补间 20 个矩形。然而,代码只会破坏最后生成的矩形。是否有一种(理想情况下简单的)方法来确保 .destroy() 适用于每个矩形而不是最后一个?

$("#combat").click(function() {

    for (var i = 0; i < 20; i++){

        var rect = new Konva.Rect({
            x: -500,
            y: stage.height()*Math.random(),
            width: 480,
            height: 20,
            fill: 'green',
            stroke: 'black',
            strokeWidth: 3
        });

        layer.add(rect);

        tween = new Konva.Tween({
            node: rect,
            duration: 1,
            x: 500,
            onFinish: function() {
                rect.destroy()
            }
        }).play();

    }

});

【问题讨论】:

    标签: javascript html5-canvas kineticjs konvajs


    【解决方案1】:
            var tween = new Konva.Tween({
                node: pentagon,
                duration: 1,
                x: 500,
                onFinish: function() {
                    // this will be tween instance
                    // this.node will be rectangle
                    console.log(this.node);
                }
            }).play();
    

    【讨论】:

      【解决方案2】:

      您可以为此使用Group 对象:

      编辑:

      $("#combat").click(function() {
      
          var rectGroup = new Konva.Group();
      
          for (var i = 0; i < 20; i++){               
      
              var rect = new Konva.Rect({
                  x: -500,
                  y: stage.height()*Math.random(),
                  width: 480,
                  height: 20,
                  fill: 'green',
                  stroke: 'black',
                  strokeWidth: 3
              });
      
              rectGroup.add(rect);        
              layer.add(rectGroup);
      
              tween = new Konva.Tween({
                  node: rect,
                  duration: 1,
                  x: 500,
                  onFinish: function() {
                      rectGroup.destroy()
                  }
              }).play();
      
          }
      
      });
      

      【讨论】:

      • 很遗憾这不起作用。仍然只有最后一个矩形被破坏。可能是因为我们在每个循环中重新定义了变量 'tween',这覆盖了之前定义的 onFinish 函数?
      • 对不起,是我的错误,Group对象应该在循环之前初始化。代码已更新。
      • 这行得通(非常感谢!)但是有没有办法确保它只破坏矩形?这是我最终需要做的,因为我的补间“持续时间:2+Math.random()*4”,据我所知,脚本会在最后一个矩形补间完成后破坏整个组。跨度>
      • 您可以在循环之前定义一个带有补间数的变量。然后通过递减它得到最后一个 Tween 并破坏整个组。参见示例:codepen.io/etumyan/pen/MwGXgx?editors=101
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2019-04-23
      相关资源
      最近更新 更多