微信小程序开发之animation循环动画实现的让云朵飘效果


Posted in Javascript onJuly 14, 2017

本文实例讲述了微信小程序开发之animation循环动画实现的让云朵飘效果。分享给大家供大家参考,具体如下:

微信小程序提供了实现动画的api——animation,但却不能循环播放,都是一次性的,动完就Over了,下面提供一个用微信小程序的animation来实现循环动画的玩具,抛砖引玉,希望大家能想出更好的方法来实现真正的循环。说是玩具是因为这个循环动画通过js脚本的setInterval来实现的,但'setInterval'在实际运行中会出现越来越严重的延迟,这是由于js的单线程运行模式所决定的(具体可以搜本关资料看),所以动画间隙并不是那么流畅,所以先玩玩吧,让我们来实现让云朵飘……

截图如下:

微信小程序开发之animation循环动画实现的让云朵飘效果

实现代码:

index.wxml

<view class="clouds">
   <image animation="{{animationCloudData}}" class="yun1" src="../../img/yun1.png"></image>
  </view>

index.js

onReady: function () {
  // 页面渲染完成
  // 实例化一个动画
  var that = this;
  var i = 0
  var ii = 0
  var animationData = wx.createAnimation({
   duration: 1000, // 默认为400   动画持续时间,单位ms
   timingFunction: 'ease-in-out',
   //transformOrigin: '4px 91px'
  });
  var animationCloudData = wx.createAnimation({
   duration: 1000, // 默认为400   动画持续时间,单位ms
   timingFunction: 'ease-in-out',
   //transformOrigin: '4px 91px'
  });
  // 顺序执行,当已经执行完上面的代码就会开启定时器
  // 循环执行代码
  //dotAnFun = setInterval(function () {});  
  /*setInterval(function () {
   // 动画脚本定义
   //animationData.rotate(6 * (++i)).step()
   //animationData.scale(2, 2).rotate(45).step().scale(1, 1).step();
   animationData.translateY(10).step({ duration: 500 }).translateY(-10).step({ duration: 500 });
   // 更新数据
   that.setData({
    // 导出动画示例
    animationData: animationData.export(),
    //animationCloudData: animationCloudData.export(),    
   })
   ++i;
   console.log(i);
  }.bind(that), 2000);//循环时间 这里1000是1秒
  */
  //动画的脚本定义必须每次都重新生成,不能放在循环外
  animationCloudData.translateX(200).step({ duration: 5000 }).translateX(0).step({ duration: 5000 });
  // 更新数据
  that.setData({
   // 导出动画示例
   //animationData: animationData.export(),
   animationCloudData: animationCloudData.export(),
  })
  setInterval(function () {
   //动画的脚本定义必须每次都重新生成,不能放在循环外
   animationCloudData.translateX(300).step({ duration: 5000 }).translateX(-100).step({ duration: 5000 });
   // 更新数据
   that.setData({
    // 导出动画示例
    //animationData: animationData.export(),
    animationCloudData: animationCloudData.export(),
   })
   ++ii;
   console.log(ii);
  }.bind(that),10000);//3000这里的设置如果小于动画step的持续时间的话会导致执行一半后出错
}

index.wxss

.clouds{
 margin-top:320rpx; 
}
.yun1{
 width:320rpx;
 height: 120rpx;
}

附:参考备用:

/*
  var that = this;
  // 页面渲染完成
  //实例化一个动画
  var animation = wx.createAnimation({
   duration: 1000,
   timingFunction: 'ease',
  })
  this.animation = animation
  animation.scale(2, 2).rotate(45).step().scale(1,1).step();
  //导出动画
  this.setData({
   animationData: animation.export()
  })
  var i = 0;
  // 顺序执行,当已经执行完上面的代码就会开启定时器
  /*setTimeout(function () {
   that.setData({
    animationData: animation.export()
   });
   i++;
   console.log(i);
  }, 1000);*/
  /*setInterval(function () {
   //循环执行代码 
    that.setData({
     animationData: animation.export()
    });
   i++;
   console.log(i); 
  }, 1000) //循环时间 这里是1秒  
 }*/

更多关于JavaScript

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
在javascript将NodeList作为Array数组处理的方法
Jul 09 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
JQuery操作单选按钮以及复选按钮示例
Sep 23 Javascript
JQuery对表格进行操作的常用技巧总结
Apr 23 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
Jan 24 Javascript
JavaScript函数节流和函数防抖之间的区别
Feb 15 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
Nov 28 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
在Vue中用canvas实现二维码和图片合成海报的方法
Jun 10 Javascript
JavaScript解析JSON数据示例
Jul 16 Javascript
详解vue 组件
Jun 11 Javascript
解决vuex刷新数据消失问题
Nov 12 Javascript
使用OPENLAYERS3实现点选的方法
Sep 24 #Javascript
vue component组件使用方法详解
Jul 14 #Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 #Javascript
Vue filters过滤器的使用方法
Jul 14 #Javascript
vue.js如何更改默认端口号8080为指定端口的方法
Jul 14 #Javascript
Vue computed计算属性的使用方法
Jul 14 #Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 #Javascript
You might like
用PHP制作静态网站的模板框架
2006/10/09 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
es6数值的扩展方法
2019/03/11 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
python中的编码知识整理汇总
2016/01/26 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
体育老师的教学自我评价分享
2013/11/19 职场文书
主管会计岗位责任制
2014/02/10 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2014年人事部工作总结
2014/12/03 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
2019年大学推荐信
2019/06/24 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
青岛市的收音机研制与生产
2022/04/07 无线电
python​格式化字符串
2022/04/20 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python