konvajs中的动画舞台滚动

问题描述 投票:0回答:1

我正在寻找一种以编程方式为舞台滚动动画的方法。这是我整理的一个示例(查看Konvajs的示例和文档):https://jsbin.com/tetakaf/edit?html,output

如您所见,该舞台是可拖动的,并且已对六边形运动进行了动画处理,以使它离开右侧的视口。动画停止后,可以通过将舞台拖动到左侧来找到它。

我正在寻找的是舞台/视口也要与六边形一起滚动,以便当六边形停止时,舞台位于视口的中心。

有没有办法实现这一目标?

这是来自jsbin的代码:

<!DOCTYPE html>
<html>
  <head>
    <script src="https://unpkg.com/[email protected]/konva.min.js"></script>
    <meta charset="utf-8" />
    <title>Konva Animate Position Demo</title>
    <style>
      body {
        margin: 0;
        padding: 0;
        overflow: hidden;
        background-color: #f0f0f0;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
    <script>
      var width = window.innerWidth;
      var height = window.innerHeight;

      var stage = new Konva.Stage({
        container: 'container',
        width: width,
        height: height,
        draggable: true,
      });

      var layer = new Konva.Layer();

      var hexagon = new Konva.RegularPolygon({
        x: stage.width() / 2,
        y: stage.height() / 2,
        sides: 6,
        radius: 20,
        fill: 'red',
        stroke: 'black',
        strokeWidth: 4
      });

      layer.add(hexagon);
      stage.add(layer);

      layer.draw();

      var velocity = 500;
      var anim = new Konva.Animation(function(frame){
        var dist = velocity * (frame.timeDiff / 1000);
        if (stage.x() > stage.width() * 0.75) {
          anim.stop();
        }
        stage.move({x: dist, y: 0});
      }, layer);
      anim.start();
    </script>
  </body>
</html>

谢谢,K

html5-canvas konvajs
1个回答
1
投票

您可以使用stage.to()方法在主动画的末尾进行简单的补间:

var velocity = 500;
var anim = new Konva.Animation(function(frame){
        var dist = velocity * (frame.timeDiff / 1000);
        if (stage.x() > stage.width() * 0.75) {
          anim.stop();
          stage.to({ x: 0});
        }
        stage.move({x: dist, y: 0});
        //stage.draw();
}, layer);

演示:https://jsbin.com/lonodajeqi/1/edit?html,output

© www.soinside.com 2019 - 2024. All rights reserved.