微信小程序 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 相关文章推荐
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
Jun 02 Javascript
利用bootstrapValidator验证UEditor
Sep 14 Javascript
JS正则替换掉小括号及内容的方法
Nov 29 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
详解Node.js串行化流程控制
May 04 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 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
php 进度条实现代码
2009/03/10 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
php中的常用魔术方法总结
2013/08/02 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
js资料toString 方法
2007/03/13 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
Python Socket编程入门教程
2014/07/11 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
Python之列表实现栈的工作功能
2019/01/28 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
幼教简历自我评价
2014/01/28 职场文书
党校培训自我鉴定
2014/02/01 职场文书
教师一岗双责责任书
2014/04/16 职场文书
后进基层党组织整改方案
2014/10/25 职场文书