微信小程序开发之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获取动态生成的元素示例
Jun 15 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
jquery任意位置浮动固定层插件用法实例
May 29 Javascript
js+css实现上下翻页相册代码分享
Aug 18 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
Jun 03 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
Oct 12 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 28 Javascript
vue脚手架搭建过程图解
Jun 06 Javascript
webpack 静态资源集中输出的方法示例
Nov 09 Javascript
vue实现滑动到底部加载更多效果
Oct 27 Javascript
Vue关于组件化开发知识点详解
May 13 Javascript
vue递归实现树形组件
Jul 15 Vue.js
使用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
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
仓库班组长岗位职责
2013/12/12 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
体育教师求职信
2014/06/30 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
2014年评职称工作总结
2014/11/20 职场文书
中学教师个人总结
2015/02/10 职场文书
感恩节寄语2015
2015/03/24 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis