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 Dialog的内存泄露问题解决方法
Jun 18 Javascript
JavaScript判断textarea值是否为空并给出相应提示
Sep 04 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
JavaScript Array对象详解
Mar 01 Javascript
bootstrap table复杂操作代码
Nov 01 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
vue事件修饰符和按键修饰符用法总结
Jul 25 Javascript
微信小程序实现选项卡功能
Jun 19 Javascript
React组件中的this的具体使用
Feb 28 Javascript
layui prompt 设置允许空白提交的方法
Sep 24 Javascript
ES5新增数组的实现方法
May 12 Javascript
js+canvas实现画板功能
Sep 13 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 文件扩展名 获取函数
2009/06/03 PHP
php购物车实现代码
2011/10/10 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
验证手机号码的JS方法分享
2013/09/10 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
javascript闭包的理解
2015/04/01 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
Python实现多行注释的另类方法
2014/08/22 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
python使用socket远程连接错误处理方法
2015/04/29 Python
python实现人脸签到系统
2020/04/13 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
银行实习生的自我评价
2013/12/09 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
作风建设演讲稿
2014/05/23 职场文书
社区清明节活动总结
2014/07/04 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
暑假安全保证书
2015/02/28 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
apache ftpserver搭建ftp服务器
2022/05/20 Servers
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL