微信小程序 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下过滤数组重复值的代码
Sep 10 Javascript
Javascript 网页水印(非图片水印)实现代码
Mar 01 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
Feb 23 Javascript
基于Jquery的文字自动截取(提供源代码)
Aug 09 Javascript
jquery 模板的应用示例
Nov 12 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
Aug 31 Javascript
浅谈Angularjs link和compile的使用区别
Oct 21 Javascript
Bootstrap的class样式小结
Dec 01 Javascript
微信小程序实现左右列表联动
May 19 Javascript
详解js中let与var声明变量的区别
Apr 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绘图技术
2013/07/03 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
jQuery操作css样式
2017/05/15 jQuery
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
记录Django开发心得
2014/07/16 Python
RC4文件加密的python实现方法
2015/06/30 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
flask中过滤器的使用详解
2018/08/01 Python
python 处理string到hex脚本的方法
2018/10/26 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Python中Selenium库使用教程详解
2020/07/23 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
软件工程专业推荐信
2013/10/28 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
党员干部一句话承诺
2014/05/30 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang