uni-app animation动画

uni.createAnimation(OBJECT)

官方文档

官方是这么描述animation动画的过程:

创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。

接下来我就一一说明

如何使用uniapp动画

先说需求, 点击按钮小猫开始运动


首先在元素上绑定动画(:animation="animationData")

<view :animation="animationData" class="animation">
    <image src="../../static/猫.png"></image>
</view>
<button @click="running" >别跑</button>

这一步是把animationData数据传递给animation属性

  export default {
    data() {
      return {
        animationData: {}
        // 在data中初始化animationData
      }
    },
    onUnload() {
      this.animationData = {}
      // 页面关闭后清空数据
    },
    onload(){
          this.animation = uni.createAnimation()  
        // 创建动画实例
    },
    methods: {
      running() {
        this.animation.translateX(500).step({duration:1000})
        // 调用实例的方法来描述动画,translateX定义动画类型为x轴偏移, 500为偏移长度, 单位px
        // 调用 step() 来表示一组动画完成(当前参数动画时间1s)
        // step 可以配置参数用于指定当前组动画的配置。具体参数请看文档
        this.animationData = this.animation.export()
        // export方法导出动画数据
      }
    }
  }

一个动画就定义好了
下面来看效果


总结一下

在这里插入图片描述

链式动画

可以在step()之后紧接第二个动画, 类似promise写法

this.animation.translateX(100).step()
    .translateY(100).step()
    .translateX(0).step()
    .translateY(0).step()

效果

动画多次触发

如果动画完成后, 元素未回到初始位置, 第二次动画是无法触发的
有两种方法使元素回到原位

通过链式操作

在动画最后在添加一个动画的, 效果是返回原位(透明度,动画时间都是0)

this.animation.translateX(200).step({duration:700})
    .translateX(0).opacity(0).step({duration:0})
设置timeout

如果动画时间是0.7s, 那就在0.8s之后使用动画让元素返回
timeout调用时间在动画完成之后
同样duration,opacity都为0

running() {
        this.animation = uni.createAnimation()
        this.animation.translateX(200).step({duration:700})
        this.animationData = this.animation.export()
        
        setTimeout(()=>{
          this.animation.translateX(0).opacity(0).step({duration:0})
          this.animationData = this.animation.export()
        }, 800);
      }

效果

uni-app是一款基于Vue.js的跨平台应用开发框架,它可以让你编写一次代码,生成适用于iOS、Android等多个平台的应用。关于uni-app中的"充电动画",它是指在应用程序中展示的一种常见交互效果,当用户为设备或虚拟内容(如APP内的虚拟角色)充电时,会显示的一个动态视觉反馈。 在uni-app中,你可以自定义这样的动画,通常这涉及到CSS和JavaScript的结合使用。比如,可以利用CSS关键帧动画(@keyframes)创建一个循环的电池充满状态变化,或者使用vue的过渡组件v-transition配合指令`v-if`或`v-show`控制元素的显示和隐藏,模拟充电过程。 以下是一个简单的例子: ```html <template> <div class="charger"> <transition :name="chargeStatus" appear> <div v-for="(status, index) in chargeSteps" :key="index" :class="{ charging: status === 'charging' }"> <!-- 根据充电进度绘制不同状态的电池 --> <span v-text="getBatteryPercent(status) + '%'"></span> </div> </transition> </div> </template> <script> export default { data() { return { chargeStatus: 'idle', // 初始状态 idle 或者 charging chargeSteps: ['idle', '10%', '30%', '60%', '80%', '100%'], // 充电步骤 }; }, methods: { getBatteryPercent(status) { if (status === 'charging') { return this.chargeSteps[this.chargeSteps.indexOf(status)]; } else { return 0; } }, }, }; </script> <style scoped> .charger .charging { animation-name: batteryCharge; animation-duration: 2s; } @keyframes batteryCharge { from { width: 0; } to { width: 100%; } } </style> ``` 在这个例子中,动画`batteryCharge`定义了电池从无到满的填充过程。在数据中改变`chargeStatus`即可触发不同的状态。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值