微信小程序开发之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 相关文章推荐
newxtree.js代码
Mar 13 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
Dec 03 Javascript
最短的IE判断代码
Mar 13 Javascript
JavaScript将Table导出到Excel实现思路及代码
Mar 13 Javascript
在ASP.NET中使用JavaScript脚本的方法
Nov 12 Javascript
Javascript单元测试框架QUnitjs详细介绍
May 08 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
Jan 22 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
jquery实现仿新浪微博评论滚动效果
Aug 06 Javascript
利用js实现前后台传送Json的示例代码
Mar 29 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
Jul 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
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
pygame播放音乐的方法
2015/05/19 Python
常用python编程模板汇总
2016/02/12 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
python requests.post带head和body的实例
2019/01/02 Python
python实现五子棋游戏
2019/06/18 Python
django的model操作汇整详解
2019/07/26 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
基于python实现学生信息管理系统
2019/11/22 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
大学活动总结范文
2014/04/29 职场文书
小学班级特色活动方案
2014/08/31 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python