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


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 相关文章推荐
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
Nov 10 Javascript
浅谈JavaScript的计时器对象
Dec 26 Javascript
原生js实现可爱糖果数字时间特效
Dec 30 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
Jun 07 Javascript
如何实现一个webpack模块解析器
Oct 24 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
phpfpm的作用和用法
2019/10/10 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
js new Date()实例测试
2019/10/31 Javascript
vue之延时刷新实例
2019/11/14 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
分享Python文本生成二维码实例
2016/01/06 Python
python之PyMongo使用总结
2017/05/26 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
Python datetime 如何处理时区信息
2020/09/02 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
班主任寄语大全
2014/04/04 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript