详解微信小程序动画Animation执行过程

详解微信小程序动画Animation执行过程

微信小程序是一种轻量化的应用程序,常用于展示性质较强的场景,并且它内置了易用且功能强大的动画组件Animation,下面我们就来详解一下这个组件的执行过程。

Animation的基本结构

在使用Animation时,我们需要先创建一个Animation实例,其结构如下:

var animation = wx.createAnimation({
  duration: 1000,
  timingFunction: 'ease',
  delay: 0,
  transformOrigin: '50% 50% 0'
})

其中各个属性的含义如下:

  • duration:动画的运行时间,单位为毫秒,默认值为0。
  • timingFunction:动画的运动方式,默认为'linear',可以设置成'ease-in'、'ease-out'、'ease-in-out'、'step-start'或'step-end'等。
  • delay:动画的延迟时间,单位为毫秒,默认值为0。
  • transformOrigin:动画的操作中心,默认为'50% 50% 0'(即元素中心点)。

Animation的执行方式

在创建了Animation实例后,我们就可以通过调用Animation的方法,来执行动画,常用的有以下三种方式:

赋值给组件的animation属性

该方式适用于要对页面中某个组件进行动画效果的情况,在wxml文件中通过该组件的animation属性来绑定该组件的动画。示例如下:

<view animation="{{ animation }}"></view>

然后在js文件中,通过Animation实例的方法,对animation属性进行操作。示例如下:

animation.translate(100).step()
this.setData({
  animation: animation.export()
})

需要注意的是,当调用Animation实例的方法时,每次调用完毕后需要调用一次step()方法来动态更新当前的动画。

导出动画队列

该方式适用于多个组件需要同时进行动画效果的情况,可以通过调用Animation实例的export()方法,将动画队列导出为数组,然后在页面中通过animation属性进行绑定。示例如下:

animation.opacity(0.2).translateX(30).step()
animation.opacity(1).translateX(0).step()

this.setData({
  animationData: animation.export()
})

在wxml文件中,可以通过animation属性来绑定动画数组。示例如下:

<view animation="{{ animationData }}"></view>

需要注意的是,当通过导出动画队列方式执行动画时,如果每个动画的时间和延迟时间不一致,会存在动画跳跃的情况,可以在导出时设置动画队列的delay属性来解决。

使用回调函数

该方式适用于多个动画有先后顺序的情况,可以通过调用Animation实例的step()方法来将当前的动画添加到动画队列中,然后通过回调函数的方式,执行下一个动画。示例如下:

animation.translate(100, 50).step().rotate(45).step()

this.setData({
  animationData: animation.export()
})

setTimeout(function() {
  animation.translate(-100, 50).step().rotate(-45).step()

  this.setData({
    animationData: animation.export()
  })
}.bind(this), 1000)

在上述示例中,第一步先执行translate动画,成功后调用step()方法将其添加到队列中,然后接着执行rotate动画,并且同样将其添加到队列中。然后通过setData方法,将动画队列绑定到页面上。

接下来通过setTimeout延迟1秒执行下一步动画,即将元素移回原位置并且还原旋转角度,然后同样通过调用step()方法,将nextRotate动画添加到队列中,最后通过setData方法将动画队列绑定到页面上。

示例说明

下面通过两个示例,分别演示如何通过Animation实例执行动画。

示例1

在该示例中,我们控制了一个图片从左上角沿直线向右下角移动到中心点,并在到达中心点时进行旋转和缩小的动画效果。示例代码如下:

<!-- index.wxml -->

<view class="wrapper">
  <image 
    class="image"
    animation="{{ animation }}"
    src="../../images/logo.png"
    mode="aspectFit">
  </image>
</view>
// index.js

Page({
  data: {
    animation: null
  },

  onLoad: function() {
    var animation = wx.createAnimation({
      duration: 1000,
      timingFunction: 'ease',
      delay: 0,
      transformOrigin: '50% 50% 0'
    })

    animation
      .translateX(250).translateY(250)
      .rotate(360).scale(0.2).opacity(0.3)
      .step()

    this.setData({
      animation: animation.export()
    })
  }
})

在以上代码中,我们先通过createAnimation方法创建了一个Animation实例,然后通过调用它的translateX和translateY方法,实现了图片沿直线向右下角移动的效果。然后又分别调用了rotate、scale和opacity方法,实现了图片旋转、缩小和透明度变化的效果。最后通过调用step方法将所有动画添加到动画序列中,然后通过export方法将动画序列导出为一个数组,赋值给了页面的animation属性。

示例2

在该示例中,我们创建了一个不断上下跳动的图标效果,并且使用了连续动画和回调函数的方式实现。示例代码如下:

<!-- index.wxml -->

<view class="wrapper">
  <image 
    class="image"
    animation="{{ animation }}"
    src="../../images/logo.png"
    mode="aspectFit">
  </image>
</view>
// index.js

Page({
  data: {
    animation: null
  },

  onLoad: function() {
    var animation = wx.createAnimation({
      duration: 1000,
      timingFunction: 'ease',
      delay: 0,
      transformOrigin: '50% 50% 0'
    })

    this.animation = animation

    this.upAndDown()
  },

  upAndDown: function() {
    this.animation.translateY(-20).step()
    this.animation.translateY(20).step()

    this.setData({
      animation: this.animation.export()
    })

    setTimeout(this.upAndDown, 1000)
  }
})

在以上代码中,我们先通过createAnimation方法创建了一个Animation实例,并将它赋值给this.animation属性。在upAndDown方法中,我们通过调用动画的translateY方法,实现了图片的上下跳动效果,并且通过连续调用step方法,将其添加到动画队列中。然后通过setData方法将该动画队列绑定到了页面组件的animation属性上。最后通过setTimeout方法,循环调用upAndDown方法,使图片不断进行上下跳动的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解微信小程序动画Animation执行过程 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript中使用Math.PI圆周率属性的方法

    当我们需要计算几何图形的面积或周长时,经常需要用到圆周率常数 π (pi)。在 JavaScript 中,我们可以使用 Math.PI 属性来访问这个数值,下面是详细步骤: 步骤1:访问Math.PI常数 Math.PI 属性中存储着圆周率的数值。可以通过直接使用 Math.PI 的方式来访问这个属性。代码如下: console.log(Math.PI); …

    JavaScript 2023年5月28日
    00
  • js中document.getElementById(id)的具体用法

    document.getElementById(id)是一种常用的JavaScript方法,用于通过指定id获得HTML文档中的元素。在此提供了具体用法的攻略: 使用方法 在JavaScript中使用 document.getElementById(id) 时,需要指定查找的元素的id,访问到元素的方法是通过指定的id来访问。 示例代码如下: // 指定id…

    JavaScript 2023年6月10日
    00
  • javascript中搜索数组的四种方法示例详解

    JavaScript中搜索数组的四种方法示例详解 在JavaScript中,数组是最常见的数据类型之一,我们经常需要在这些数组中查找某个特定元素。本文将详细介绍JavaScript中搜索数组的四种方法。这些方法都侧重于根据数组元素的值来查找指定的元素。 1. indexOf()方法 indexOf()方法是JavaScript中一个内置的数组方法,用于查找指…

    JavaScript 2023年5月27日
    00
  • JavaScript中计算网页中某个元素的位置

    计算网页中某个元素的位置是前端开发中经常会遇到的需求,在JavaScript中可以通过以下步骤来实现: 获取元素 要计算某个元素的位置,首先需要获取到该元素。在JavaScript中,可以通过以下方法来获取元素: const element = document.getElementById(‘elementId’); 其中,’elementId’为要获取元…

    JavaScript 2023年6月11日
    00
  • JavaScript中三个等号和两个等号你了解多少

    JavaScript中的等于操作符有两种,分别是双等于”==”和三等于”===”。这两个操作符的区别在于判断相等性时类型的转换策略不同。下面进一步说明两种操作符的区别和应用场景。 双等于”==” 当使用双等于”==”进行相等比较时,如果两边的值类型不同,JavaScript会自动将值进行类型转换再进行比较判断。转换规则如下: 如果其中一边是布尔值,则将其转换…

    JavaScript 2023年5月28日
    00
  • jQuery框架实现元素显示及隐藏三种动画方式

    当我们需要在网站中实现元素的显示与隐藏的动画效果时,可以使用jQuery框架提供的三种动画方式。接下来我将详细讲解JavaScpt框架的三种动画方式的实现方法,让你可以轻松实现网站元素的动画效果。 1. jQuery框架fadeIn/fadeOut实现元素渐隐/渐显 1.1 动画效果简介 当我们需要在网站中实现元素的淡出/淡入效果时,可以使用jQuery框架…

    JavaScript 2023年6月11日
    00
  • jQuery 验证插件 Web前端设计模式(asp.net)

    jQuery 验证插件 Web前端设计模式(asp.net)主要是为了在ASP.NET网站上实现前端数据验证的功能。其主要思想是利用jQuery框架来实现快速灵活的前端验证,可以在用户提交表单前通过前端验证规则来减少后端校验的负担。以下是实现该功能的详细攻略: 1. 下载和引入jQuery验证插件 我们可以从jQuery的官网上下载jQuery源代码,然后再…

    JavaScript 2023年6月10日
    00
  • JS立即执行函数功能与用法分析

    下面是关于JS立即执行函数功能与用法分析的完整攻略。 一、什么是立即执行函数 立即执行函数(Immediately Invoked Function Expression, IIFE)是函数表达式的一种形式,它可以在定义后直接调用执行,不需要进行额外的函数调用。通常使用括号将函数表达式包裹起来,然后在最后加上一个括号,用于立即执行该函数。 代码示例: (fu…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部