【问题标题】:Animate stage scrolling in konvajs在 konvajs 中动画阶段滚动
【发布时间】:2020-04-17 03:22:12
【问题描述】:

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

如您所见,舞台是可拖动的,并且六边形的运动是动画的,因此它会向右移出视口。动画停止后,您可以通过向左拖动舞台来找到它。

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

有没有办法做到这一点?

这是来自 jsbin 的代码:

<!DOCTYPE html>
<html>
  <head>
    <script src="https://unpkg.com/konva@4.1.0/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>

谢谢, 克

【问题讨论】:

    标签: html5-canvas konvajs


    【解决方案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

    【讨论】:

    • 太棒了!谢谢。文档说“补间参数”。我在哪里可以找到我可以传递的参数的完整列表?或者相关的示例是否全部显示?
    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多