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


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 相关文章推荐
跟随鼠标旋转的文字
Nov 30 Javascript
javascript 流畅动画实现原理
Sep 08 Javascript
基于JQuery实现相同内容合并单元格的代码
Jan 12 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
wap图片滚动特效无css3元素纯js脚本编写
Aug 22 Javascript
JavaScript严格模式禁用With语句的原因
Oct 20 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
在node中如何使用 ES6
Apr 22 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
Oct 11 Javascript
详解ES6系列之私有变量的实现
Nov 21 Javascript
layer.js之回调销毁对话框的例子
Sep 11 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编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
destoon常用的安全设置概述
2014/06/21 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
Python3 读取Word文件方式
2020/02/13 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
文秘专业自荐信
2013/10/14 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
大学入学感言
2015/08/01 职场文书
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python