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


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 相关文章推荐
关于jQuery UI 使用心得及技巧
Oct 10 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
Oct 17 Javascript
在JavaScript中使用NaN值的方法
Jun 05 Javascript
超级给力的JavaScript的React框架入门教程
Jul 02 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
Aug 06 Javascript
JS实现弹性菜单效果代码
Sep 07 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
jQuery.datatables.js插件用法及api实例详解
Oct 28 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
常用的9个JavaScript图表库详解
Dec 19 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 水平的题目
2007/05/30 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
Python 获取当前所在目录的方法详解
2017/08/02 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
python如何快速生成时间戳
2020/07/21 Python
pandas按条件筛选数据的实现
2021/02/20 Python
新闻记者个人求职的自我评价
2013/11/28 职场文书
团日活动总结怎么写
2014/06/25 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang