微信小程序开发之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[js]获取url参数的代码
Oct 17 Javascript
jQuery阻止同类型事件小结
Apr 19 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
script标签属性用type还是language
Jan 21 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
ES6新特性之模块Module用法详解
Apr 01 Javascript
使用javaScript实现鼠标拖拽事件
Apr 03 Javascript
JS获取一个表单字段中多条数据并转化为json格式
Oct 17 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
Nov 14 Javascript
了解JavaScript中let语句
May 30 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
php使用curl存储cookie的示例
2014/03/31 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
完善的jquery处理机制
2016/02/21 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
小程序转发探索示例
2019/02/19 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
Python正则表达式完全指南
2017/05/25 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
python将list转为matrix的方法
2018/12/12 Python
python创造虚拟环境方法总结
2019/03/04 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
本科生求职信
2014/06/17 职场文书
党在我心中演讲稿
2014/09/02 职场文书
党校党性分析材料
2014/12/19 职场文书
英文感谢信格式
2015/01/21 职场文书
检举信的写法
2019/04/10 职场文书
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android