微信小程序实现渐入渐出动画效果


Posted in Javascript onJune 13, 2019

前言

在做小程序列表展示的时候,接到了一个需求。需要在列表展示的时候加上动画效果。设计视频效果如下图:

微信小程序实现渐入渐出动画效果

需要在进入列表页的时候,依次展示每一条卡片,在展示完成后需要隐藏掉当天之前的卡片。

实现思路

实现该动画效果,首先需要给每个卡片添加一个css动画。因为每个卡片的显示是有时间间隔的,以及考虑到展示完成后的隐藏效果,所以动画效果需要用js动态去添加。在看了微信开发文档后,发现微信小程序提供了Animation的一个动画对象,具体看了里面的参数后发现,是可以实现需求上的效果的。具体使用如下api:

wx.createAnimation(Object object) 创建一个animation对象。最后通过动画实例的export方法导出动画数据传递给组件的 animation 属性。里面有如下参数:duration(动画持续时间,单位 ms),timingFunction(动画的国度效果),delay(动画延迟)

创建的animation对象,本次实现过程中需要用到如下属性:

Animation.export() 可以导出动画队列,export 方法每次调用后会清掉之前的动画操作。
Animation.step(Object object) 表示一组动画完成。可以在一组动画中调用任意多个动画方法,一组动画中的所有动画会同时开始,一组动画完成后才会进行下一组动画。比如一组动画结束了,就以step()结尾
Animation.translateY(number translation) 在 Y 轴平移的距离,单位为 px
Animation.opacity(number value) 透明度 0-1的取值范围

看到上面这些属性,合理使用的话,那么实现需求提到动画效果那是稳稳的。

实现步骤

封装一个方法,用来创建动画,并方便调用

/**
 * 动画实现
 * @method animationShow
 * @param {that} 当前卡片
 * @param {opacity} 透明度
 * @param {delay} 延迟
 * @param {isUp} 移动方向
 */
 animationShow: function (that,opacity, delay, isUp) {
 let animation = wx.createAnimation({
  duration: 1000,
  timingFunction: 'ease',
  delay: delay
 });
 <!--考虑到还需要隐藏掉当天之前的卡片,做如下判断来赋予不同的动画效果-->
 if (isUp == 'down') {
  animation.translateY(0).opacity(opacity).step().translateY(-80).step();
 } else if (isUp == 'up') {
  animation.translateY(0).opacity(opacity).step().translateY(-140).opacity(0).step()
 } else {
  animation.translateY(0).opacity(opacity).step()
 }
 let params = ''
 params = animation.export()
 return params
 },

初始化每个卡片的样式

首先每个卡片的位置相对于自身往Y轴平移80像素,并且把透明度设置为0。这样就可以进入页面的时候再往下平移并且让卡片逐渐显示。

.init{
 opacity: 0;
 transform: translateY(-80px)
}

处理数据

循环处理每一条数据,通过调用封装的方法,来获得该卡片应该拥有的动画属性

for (let i = 0; i < transData.length; i++) {
 if (i == 0) {
  transData[i].animation = that.app.slideupshow(that, 1, 0, 'up')
 } else {
  transData[i].animation = that.app.slideupshow(that, 1, (i + 1) * 10, 'down')
 }
 }

给每个卡片附加animation属性

<view class="init" animation="{{item.animation}}">

实现效果

微信小程序实现渐入渐出动画效果

跟设计视频中的动画风格基本保持一致,美滋滋。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用jscript实现新建和保存一个word文档
Jun 15 Javascript
表单填写时用回车代替TAB的实现方法
Oct 09 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
JavaScript中的undefined学习总结
Nov 30 Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
js实现显示当前状态的导航效果代码
Aug 28 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
Jan 28 Javascript
理解Javascript图片预加载
Feb 23 Javascript
angularjs实现搜索的关键字在正文中高亮出来
Jun 13 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 Javascript
js实现简单贪吃蛇游戏
May 15 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 #Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
Jun 13 #Javascript
javascript实现的字符串转换成数组操作示例
Jun 13 #Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 #Javascript
深入了解JavaScript代码覆盖
Jun 13 #Javascript
js使用cookie实现记住用户名功能示例
Jun 13 #Javascript
探索JavaScript中私有成员的相关知识
Jun 13 #Javascript
You might like
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
原生python实现knn分类算法
2019/10/24 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
公司门卫管理制度
2014/02/01 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
高中开学感言
2015/08/01 职场文书
Python中的tkinter库简单案例详解
2022/01/22 Python