微信小程序实现元素渐入渐出动画效果封装方法


Posted in Javascript onMay 18, 2019

开端

之前一直使用堪称“万能”的jQuery处理用户交互的动画,近日开发微信小程序,微信小程序高度限制的语法和功能使开源函数可谓对其“无能为力”。
那没办法,只好自己写一个可以让元素渐入渐出的,可复用的函数了。做到类似jQuery show()的效果

原创文章,允许转载分享。但请转载请一定标明出处,这是起码的尊重
本文章阅读前需要对微信小程序的动画api有所了解

先看效果

可以看到,动画效果十分流畅,高度复用,封装好后只需要三行代码实现动画

微信小程序实现元素渐入渐出动画效果封装方法

解决

1.寻根问底,发现wx_mini_program(下面称呼微信小程序为wxmp [差点叫成 (*´ノ皿`)mmp] )有一个全局的js逻辑文件,叫app.js,有意思,可以往里面塞自己写的object(函数数据等等),那就从那里入手吧
2.在app.js中定义全局的动画函数

App({
 //渐入,渐出实现 
 show : function(that,param,opacity){
  var animation = wx.createAnimation({
   //持续时间800ms
   duration: 800,
   timingFunction: 'ease',
  });
  //var animation = this.animation
  animation.opacity(opacity).step()
  //将param转换为key
  var json = '{"' + param + '":""}'
  json = JSON.parse(json);
  json[param] = animation.export()
  //设置动画
  that.setData(json)
 },

 //滑动渐入渐出
 slideupshow:function(that,param,px,opacity){
  var animation = wx.createAnimation({
   duration: 800,
   timingFunction: 'ease',
  });
  animation.translateY(px).opacity(opacity).step()
  //将param转换为key
  var json = '{"' + param + '":""}'
  json = JSON.parse(json);
  json[param] = animation.export()
  //设置动画
  that.setData(json)
 },

 //向右滑动渐入渐出
 sliderightshow: function (that, param, px, opacity) {
  var animation = wx.createAnimation({
   duration: 800,
   timingFunction: 'ease',
  });
  animation.translateX(px).opacity(opacity).step()
  //将param转换为key
  var json = '{"' + param + '":""}'
  json = JSON.parse(json);
  json[param] = animation.export()
  //设置动画
  that.setData(json)
 }
})

3.现在我们再看看调用这个函数的具体方法
在wxml中,只需要设置animation绑定即可,以首页index为例

// 这里是pages/page/index.wxml
//使用view包裹需要动画的元素
//class中定义动画开始前的初始样式,如透明度=0,向下偏移200px等,animtion属性填入绑定值
<view class="init" animation="{{slide_up1}}">

4.在该页的js中

// 这里是pages/page/index.js
//首先获取小程序实例,访问app.js中的函数
this.app = getApp();
//调用show函数,传参
//注意:查看上面show函数定义查看参数含义
//第一个参数是当前的页面对象,方便函数setData直接返回数据
//第二个参数是绑定的数据名,传参给setData,详细见上面
//第三个参数是上下滑动的px,因为class="init"定义初始该元素向下偏移了200px,所以这里使其上移200px
//第四个参数是需要修改为的透明度,这里是1,表示从初始的class="init"中定义的透明度0修改到1
this.app.slideupshow(this, 'slide_up1', -200, 1)

5.让我们完善流程,达到预览图首页的效果(有延时的边上升边出现效果)
wxml就是将各个容器分别绑定不同的变量,一个view容器就是一个动画单位(可以这样理解),如

<view class="init" animation="{{slide_up1}}">
  <card>...</card>
</view>
<view class="init" animation="{{slide_up2}}">
  <card>...</card>
</view>

页面的js

//onload时获取小程序实例
onLoad: function (options) {
  this.app = getApp()
 },
//页面展示时,触发动画
 onShow: function () {
  this.app.slideupshow(this, 'slide_up1', -200, 1)

  setTimeout(function () {
   this.app.slideupshow(this, 'slide_up2', -200, 1)
  }.bind(this), 200);
 },
//页面隐藏时,触发渐出动画
 onHide: function () {
   //你可以看到,动画参数的200,0与渐入时的-200,1刚好是相反的,其实也就做到了页面还原的作用,使页面重新打开时重新展示动画
  this.app.slideupshow(this, 'slide_up1', 200, 0)
  //延时展现容器2,做到瀑布流的效果,见上面预览图
  setTimeout(function () {
   this.app.slideupshow(this, 'slide_up2', 200, 0)
  }.bind(this), 200);
 }

以上所述是小编给大家介绍的微信小程序实现元素渐入渐出动画效果封装方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用js实现上传图片前的预览(TX的面试题)
Aug 14 Javascript
得到form下的所有的input的js代码
Nov 07 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
javascript使用正则表达式检测IP地址
Dec 03 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
May 09 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
Javascript实现代码折叠功能
Aug 25 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
May 29 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 Javascript
JS实现进度条动态加载特效
Mar 25 Javascript
微信小程序收货地址API兼容低版本解决方法
May 18 #Javascript
小程序云开发获取不到数据库记录的解决方法
May 18 #Javascript
小程序云开发之用户注册登录
May 18 #Javascript
小程序云开发实现数据库异步操作同步化
May 18 #Javascript
微信小程序云开发之数据库操作
May 18 #Javascript
微信小程序云开发如何使用云函数生成二维码
May 18 #Javascript
史上最为详细的javascript继承(推荐)
May 18 #Javascript
You might like
PHP 读取和编写 XML
2014/11/19 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
php编写简单的文章发布程序
2015/06/18 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
javascript知识点收藏
2007/02/22 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
村级四风对照检查材料
2014/08/24 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
违反学校规则制度检讨书
2015/01/01 职场文书
2015年村级财务管理制度
2015/08/04 职场文书