微信小程序开发之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 相关文章推荐
由prototype_1.3.1进入javascript殿堂-类的初探
Nov 06 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
Mar 25 Javascript
JavaScript声明变量时为什么要加var关键字
Sep 29 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
js实现字符全排列算法的简单方法
May 01 Javascript
微信小程序开发教程之增加mixin扩展
Aug 09 Javascript
浅谈angular4生命周期钩子
Sep 05 Javascript
记录一篇关于redux-saga的基本使用过程
Aug 18 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
Aug 27 Javascript
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
JS浮点数运算结果不精确的Bug解决
Aug 01 Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 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中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
php时间不正确的解决方法
2008/04/09 PHP
分享PHP header函数使用教程
2013/09/05 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP引用返回用法示例
2016/05/28 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
一个JS翻页效果
2007/07/23 Javascript
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
python多重继承实例
2014/10/11 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
大专生简历的自我评价
2013/11/26 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
护士医德医风自我评价
2014/09/15 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
数学备课组工作总结
2015/08/12 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
高三英语教学反思
2016/03/03 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python