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


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 相关文章推荐
javascript实现仿银行密码输入框效果的代码
Dec 13 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
Nov 19 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
基于jPlayer三分屏的制作方法
Dec 21 Javascript
javascript 正则表达式分组、断言详解
Apr 20 Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 Javascript
解决select2在bootstrap modal中不能正常使用的问题
Aug 09 Javascript
jQuery实现轮播图效果
Nov 26 jQuery
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
微信公众号网页分享功能开发的示例代码
May 27 Javascript
解决Nuxt使用axios跨域问题
Jul 06 Javascript
解决vue scoped html样式无效的问题
Oct 24 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP输出日历表代码实例
2015/03/27 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
php获取linux命令结果的实例
2017/03/13 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
python使用psutil模块获取系统状态
2016/08/27 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
python assert的用处示例详解
2019/04/01 Python
详解【python】str与json类型转换
2019/04/29 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Pygame框架实现飞机大战
2020/08/07 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
开水果连锁店创业计划书
2013/12/29 职场文书
财务部经理岗位职责
2014/02/03 职场文书
公司委托书格式范文
2014/04/04 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
文明单位汇报材料
2014/12/24 职场文书
六年级数学教学反思
2016/02/16 职场文书
《法国号》教学反思
2016/02/22 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android