微信小程序开发之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中的107个基础知识收集整理 推荐
Mar 29 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
Jun 13 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
Feb 08 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
json传值以及ajax接收详解
May 24 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
PHP读取远程txt文档到数组并实现遍历
Aug 25 Javascript
JavaScript 防盗链的原理以及破解方法
Dec 29 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里的中文变量说明
2011/07/23 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
JS event使用方法详解
2008/04/28 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
range 标准化之获取
2011/08/28 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
python3 map函数和filter函数详解
2019/08/26 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
团队经理竞聘书
2014/03/31 职场文书
责任书范本
2014/08/25 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
2015年三万活动总结
2015/03/25 职场文书
刑事法律意见书
2015/06/04 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python