微信小程序 Animation实现图片旋转动画示例


Posted in Javascript onAugust 22, 2018

最近小程序中有一个图片旋转的需求,最初是想着通过切换多张图片达到旋转的效果,后来发现微信小程序带有动画api,然后就改由image+Animation来实现。

首先在wxml中定义image

<image class="bth_image2" mode="aspectFit" animation="{{animation}}" src='../../images/***.png'></image>

注意其中的animation属性,image就由它来实现动画。

而{{animation}}我们在js的data中定义

data: {
  animation: ''
},

改变animation的值(官网提供角度范围是-180~180,但是我发现角度越大会一直旋转)

onShow: function() {
    console.log('index---------onShow()')
     this.animation = wx.createAnimation({
     duration: 1400,
     timingFunction: 'linear', // "linear","ease","ease-in","ease-in-out","ease-out","step-start","step-end"
     delay: 0,
     transformOrigin: '50% 50% 0',
     success: function(res) {
      console.log("res")
     }
    })
   },
   rotateAni: function (n) {
    console.log("rotate=="+n)
    this.animation.rotate(180*(n)).step()
    this.setData({
     animation: this.animation.export()
    })
   },

相关代码

var _animation;
var _animationIndex
const _ANIMATION_TIME = 500;
pages {
...
 onShow: function () {
  _animation = wx.createAnimation({
   duration: _ANIMATION_TIME,
   timingFunction: 'linear', // "linear","ease","ease-in","ease-in-out","ease-out","step-start","step-end"
   delay: 0,
   transformOrigin: '50% 50% 0'
})
},

/**
 * 实现image旋转动画,每次旋转 120*n度
 */
 rotateAni: function (n) {
  _animation.rotate(120 * (n)).step()
this.setData({
   animation: _animation.export()
})
},

/**
 * 开始旋转
 */
 startAnimationInterval: function () {
var that = this;
  that.rotateAni(++_loadImagePathIndex); // 进行一次旋转
  _animationIntervalId = setInterval(function () {
   that.rotateAni(++_loadImagePathIndex);
}, _ANIMATION_TIME); // 没间隔_ANIMATION_TIME进行一次旋转
},

/**
 * 停止旋转
 */
 stopAnimationInterval: function () {
if (_animationIntervalId> 0) {
   clearInterval(_animationIntervalId);
   _animationIntervalId = 0;
}
},
}

微信自带的Animation可以实现一次动画,然后可以通过setInterval来达到不断旋转的目的,在使用时,控制startAnimationInterval和stopAnimationInterval即可。

注意:

这里为什么不直接给_animation.rotate(120 * (n)).step()设置一个足够大的值,原因有两点:

1、我们需要便利的控制开始和停止,

2、animation在小程序进入后台后,会持续运行,占用手机内存和cpu,而小程序依赖于微信,在iphone上会导致微信被终止运行

在使用animation时,会发现有时候出现旋转速度很快或者反向旋转再正向旋转的清空,这都是由于rotate的值设置有问题。

1、rotate的值应该是上一次结束时的值,
2、如果设置了全局变量,记得在oncreate时初始化,不然第二次打开同一页面会有问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使javascript也能包含文件
Oct 26 Javascript
一些常用的JS功能函数(2009-06-04更新)
Jun 04 Javascript
JS中的this变量的使用介绍
Oct 21 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
Bootstrap CSS布局之列表
Dec 15 Javascript
node.js中http模块和url模块的简单介绍
Oct 06 Javascript
微信小程序项目实践之主页tab选项实现
Jul 18 Javascript
express中static中间件的具体使用方法
Oct 17 Javascript
详解React 元素渲染
Jul 07 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 Javascript
在vue中实现echarts随窗体变化
Jul 27 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
Sep 10 Javascript
Vue动态获取width的方法
Aug 22 #Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 #Javascript
Vue2.2.0+新特性整理及注意事项
Aug 22 #Javascript
Vue之mixin全局的用法详解
Aug 22 #Javascript
React中使用UEditor百度富文本的方法
Aug 22 #Javascript
VUE 全局变量的几种实现方式
Aug 22 #Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 #Javascript
You might like
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
php xhprof使用实例详解
2019/04/15 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
详解webpack babel的配置
2018/01/09 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
python实现整数的二进制循环移位
2019/03/08 Python
pandas取出重复数据的方法
2019/07/04 Python
pywinauto自动化操作记事本
2019/08/26 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
Python如何省略括号方法详解
2020/03/21 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
2014年党务公开方案
2014/05/08 职场文书
教师个人事迹材料
2014/12/17 职场文书
试用期辞职信范文
2015/03/02 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python