Vue 列表上下过渡效果的实例代码


Posted in Javascript onJune 25, 2019

最近有个需求,一个列表上下移动要有简单过渡效果,在网上找了找没找到,可能是我搜的关键词不对?

试了试 Vue 的 transition-group ,也没有达到预期的效果,然后就花了点时间做了一个操作Demo。

最终效果

某列的数据由 X 位置上升到 Y 位置的过渡效果

Vue 列表上下过渡效果的实例代码

技术点 visibility: hidden v-for key 这么简单的实现哪有什么技术点,哈哈哈 实现方式

这个过渡效果一共由三部分组成:

Y行 位置插入 X行 位置的数据,添加一个高度展开效果,并使该行的数据不可见 X行 数据不可见, 并添加一个高度收起效果 原地克隆 X行 的DOM, 设置为固定定位 fixedtop 取X行距离 body 的位置( offsetTop ), 并做一个向上移动效果到 Y行 位置

来看一个放慢版的效果,加了个边框并且没有设置 visibility 属性,看的会更明了:

Vue 列表上下过渡效果的实例代码

简单说一下。

第一部分描述一个让目标位置底下所有行有一个向下移动的过程。

第二部分描述那个移动的行消失的过程。

第三部分描述一个移动的过程。

为了不污染数据渲染出来的视图,除了固定定位的那个盒子是直接操作DOM,之外的两个效果是通过操作数据+类名实现的。

遇到的问题 图片闪烁问题

Vue 列表上下过渡效果的实例代码

原因:由于 v-for 的时候给每行的 keyindex ,数据源发生变化后会导致受影响的元素的 index 也发生改变。

解决:将 key 的值由 index 更换为 item (唯一值, 在这里 item 指的是图片url) 。

频繁更新数据问题

当位置频繁改变的时候要清除上一次的动画遗留元素,不然元素会发生各种错乱,这个很容易想的到,错误演示就不录了,看一下完成的效果。

Vue 列表上下过渡效果的实例代码

Duplicate keys detected

原因:第一部分插入 X行 数据造成,因为两条相同的数据重复的 item 会造成重复的 key

解决:在进行第一部分的时候将原来那一行的 key 改为其它值。

<li :key="closeIndex === index ? Date.now() : item"></li>

我用的时间戳,其实理论上来讲只要能保持唯一写什么都可以,反正这一行数据将在动画结束后从数据中删除。

总结

以上所述是小编给大家介绍的Vue 列表上下过渡效果的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
基于jquery的表头固定的若干方法
Jan 27 Javascript
javascript算法学习(直接插入排序)
Apr 12 Javascript
jQuery中创建实例与原型继承揭秘
Dec 21 Javascript
js控制frameSet示例
Sep 10 Javascript
Three.js基础部分学习
Jan 08 Javascript
angular.js+node.js实现下载图片处理详解
Mar 31 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
Dec 07 Javascript
mac上配置Android环境变量的方法
Jul 08 Javascript
JavaScript惰性求值的一种实现方法示例
Jan 11 Javascript
使用express获取微信小程序二维码小记
May 21 Javascript
layui点击弹框页面 表单请求的方法
Sep 21 Javascript
JavaScript实现矩形块大小任意缩放
Aug 25 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 #Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 #Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 #Javascript
ES6 Object属性新的写法实例小结
Jun 25 #Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 #Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 #Javascript
Node.js实现简单的爬取的示例代码
Jun 25 #Javascript
You might like
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
php学习之function的用法
2012/07/14 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
Python os模块介绍
2014/11/30 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
深入理解Django的自定义过滤器
2017/10/17 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
Jupyter加载文件的实现方法
2020/04/14 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
局部内部类是否可以访问非final变量?
2013/04/20 面试题
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
测试时代收集的软件测试面试题
2013/09/25 面试题
兼职学生的自我评价
2013/11/24 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
护士求职自荐信范文
2014/03/19 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
汽车转让协议书
2015/01/29 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
JS ES6异步解决方案
2021/04/29 Javascript
MySQL Server层四个日志的实现
2022/03/31 MySQL
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby