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


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 相关文章推荐
根据分辨率不同,调用不同的css文件
Aug 25 Javascript
php与js的区别是什么
Aug 05 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
Dec 13 Javascript
AngularJS封装$http.post()实例详解
May 06 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
Jun 15 Javascript
Javascript中将变量转换为字符串的三种方法
Sep 19 Javascript
vue 实现剪裁图片并上传服务器功能
Mar 01 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 Javascript
通过vue刷新左侧菜单栏操作
Aug 06 Javascript
vue项目打包后请求地址错误/打包后跨域操作
Nov 04 Javascript
vuex的数据渲染与修改浅析
Nov 26 Vue.js
微信小程序收货地址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+Ajax实现验证码的实时验证
2016/07/20 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
vue项目实战总结篇
2018/02/11 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
Python中设置变量访问权限的方法
2015/04/27 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
ktv收银员岗位职责
2013/12/16 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
思想政治表现评语
2015/01/04 职场文书
公务员政审个人总结
2015/02/12 职场文书
职称评定个人总结
2015/03/05 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
Minikube搭建Kubernetes集群
2022/03/31 Servers
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python