首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Konva tweens绘制客户动画?

如何使用Konva tweens绘制客户动画?
EN

Stack Overflow用户
提问于 2022-09-19 07:58:50
回答 1查看 43关注 0票数 0

像这个弹跳和这个光速

我已经使用了移动、旋转、淡出、缩放等代码

代码语言:javascript
复制
const { x, y } = moveXY;
const tween = creatTween({
  node: kvNode,
  x: x,
  y: y,
  duration: config.enter_duration / 1000, 
  easing: Konva.Easings[config.enter_easings], 
  yoyo: false, 
  onUpdate: function () {},
  onFinish: function () {
    if (!config.enter_direction) {
      tween.reset();
    }
  },
});
tween.play();

怎样才能像上面的图片那样实现动画?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-14 00:21:37

你可以做到这一点。调整步骤和值以接收所需的结果:

代码语言:javascript
复制
var width = window.innerWidth;
var height = window.innerHeight;

const promisedTo = (shape, opts) => {
  return new Promise((res) => shape.to({ onFinish: res, ...opts }));
};

const sequentialAnimations = async (shape, defaultConfig, configs) => {
  for (let config of configs) {
    await promisedTo(shape, {
      ...defaultConfig,
      ...config,
      onUpdate: () => stage.batchDraw(),
    });
  }
};

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

var layer = new Konva.Layer();

var rect = new Konva.Rect({
  x: 100,
  y: 100,
  width: 50,
  height: 50,
  offsetX: 25,
  offsetY: 25,
  fill: 'green',
});

var rect2 = new Konva.Rect({
  x: 100,
  y: 200,
  width: 50,
  height: 50,
  offsetX: 25,
  offsetY: 25,
  fill: 'blue',
});

const bounce = (shape) => {
  const initialState = {
    scaleX: shape.scaleX(),
    scaleY: shape.scaleY(),
    opacity: shape.opacity(),
  };
  sequentialAnimations(shape, { easing: Konva.Easings.EaseInOut }, [
    { scaleX: 0.7, scaleY: 0.7, duration: 0.2 },
    { scaleX: 1, scaleY: 1, duration: 0.2 },
    { opacity: 0, scaleX: 0.2, scaleY: 0.2, duration: 0.4 },
    { ...initialState, duration: 0.3 },
  ]);
};

const lightspeed = (shape) => {
  const initialState = {
    x: shape.x(),
    skewX: shape.skewX(),
    opacity: shape.opacity(),
  };
  sequentialAnimations(shape, { easing: Konva.Easings.EaseInOut }, [
    { skewX: -1, x: initialState.x - 100, opacity: 0, duration: 0.2 },
    { skewX: -2, x: -50, opacity: 0, duration: 0.4 },
    { ...initialState, duration: 0.3 },
  ]);
};

layer.add(rect, rect2);

stage.add(layer);
stage.batchDraw();

lightspeed(rect);
bounce(rect2);
代码语言:javascript
复制
<script src="https://unpkg.com/konva@8/konva.min.js"></script>
<div id="container" />

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73770175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档