微信小程序开发之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 相关文章推荐
jQuery 使用个人心得
Feb 26 Javascript
基于jQuery UI CSS Framework开发Widget的经验
Aug 21 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
基于vue循环列表时点击跳转页面的方法
Aug 31 Javascript
基于vue中keep-alive缓存问题的解决方法
Sep 21 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
详解vue中使用微信jssdk
Apr 19 Javascript
说说如何利用 Node.js 代理解决跨域问题
Apr 22 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
Apr 07 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 从数据库提取二进制图片的处理代码
2009/09/09 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
js 本地预览的简单实现方法
2014/02/18 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
python list转置和前后反转的例子
2019/08/26 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
python mock测试的示例
2020/10/19 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
大一自我鉴定范文
2013/10/04 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书