# 动画方案 --- # 原理 Hippy 的动画则是完全由前端传入动画参数,由终端控制每一帧的计算和排版更新,减少了前端与终端的通信次数,因此也大大减少动画的卡顿。 # 酷炫效果 * 关注动画 关注动画 * 点赞微笑动画 点赞微笑 * 进度条动画 PK进度条动画 # 如何使用 以 `Hippy-React` 为例,在 Hippy 上实现一个动画分为三个步骤: 1. 通过 Animation 或 AnimationSet 定义动画 2. 在 render() 时,将动画设置到需要产生动画效果的控件属性上 3. 通过 Animation 的 start 方法启动动画,与通过 destroy 方法停止并销毁动画; ## 示例代码 ```js import { Animation, StyleSheet } from "@hippy/react"; import React, { Component } from "react"; export default class AnimationExample extends Component { componentDidMount() { // 动画参数的设置 this.verticalAnimation = new Animation({ startValue: 0, // 动画开始值 toValue: 100, // 动画结束值 duration: 500, // 动画持续时长 delay: 360, // 至动画真正开始的延迟时间 mode: "timing", // 动画模式,现在只支持timing timingFunction: "linear", // 动画缓动函数 }); this.horizonAnimation = new Animation({ startValue: 0, // 开始值 toValue: 100, // 动画结束值 duration: 500, // 动画持续时长 delay: 360, // 至动画真正开始的延迟时间 mode: "timing", // 动画模式,现在只支持timing timingFunction: "linear", // 动画缓动函数 }); this.scaleAnimationSet = new AnimationSet({ children: [ { animation: new Animation({ startValue: 1, toValue: 1.4, duration: 200, delay: 0, mode: "timing", timingFunction: "linear", }), follow: false, // 配置子动画的执行是否跟随执行 }, { animation: new Animation({ startValue: 1.4, toValue: 0.2, duration: 210, delay: 200, mode: "timing", timingFunction: "linear", }), follow: true, }, ], }); } componentWillUnmount() { // 如果动画没有销毁,需要在此处保证销毁动画,以免动画后台运行耗电 this.scaleAnimationSet && this.scaleAnimationSet.destroy(); this.horizonAnimation && this.horizonAnimation.destroy(); this.verticalAnimation && this.verticalAnimation.destroy(); } render() { return ( { this.verticalAnimation.start(); }} > 水平位移动画 { this.horizonAnimation.start(); }} > 垂直位移动画 { this.scaleAnimationSet.start(); }} > 图形形变动画 ); } } // 样式代码省略 ``` ## 更多使用说明 详细使用,可以参考 * [HippyReact Animation 模块](hippy-react/modules.md?id=animation) * [HippyVue animation 组件](hippy-vue/external-components?id=animation)