我正在寻找一种以编程方式为舞台滚动动画的方法。这是我整理的一个示例(查看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
您可以使用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);