微信小程序 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调试工具(下载)
Jan 09 Javascript
在网页中使用document.write时遭遇的奇怪问题
Aug 24 Javascript
详解JavaScript中的异常处理方法
Jun 16 Javascript
ajax图片上传,图片异步上传,更新实例
Dec 30 Javascript
微信小程序 图片边框解决方法
Jan 16 Javascript
JQuery 选择器、DOM节点操作练习实例
Sep 28 jQuery
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
vue-cli webpack 引入jquery的方法
Jan 10 jQuery
基于vue-resource jsonp跨域问题的解决方法
Feb 03 Javascript
jQuery中each遍历的三种方法实例分析
Sep 07 jQuery
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
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
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
wxPython框架类和面板类的使用实例
2014/09/28 Python
举例讲解Python中装饰器的用法
2015/04/27 Python
Python中super关键字用法实例分析
2015/05/28 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
使用Python封装excel操作指南
2021/01/29 Python
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
卖车协议书范例
2014/09/16 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
pytorch中的numel函数用法说明
2021/05/13 Python
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript