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 相关文章推荐
js左侧三级菜单导航实例代码
Sep 13 Javascript
JavaScript编程中容易出BUG的几点小知识
Jan 31 Javascript
JavaScript 事件绑定及深入
Apr 13 Javascript
第一次接触神奇的Bootstrap表单
Jul 27 Javascript
详解JavaScript中数组的reduce方法
Dec 02 Javascript
angularjs之$timeout指令详解
Jun 13 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
vue中选项卡点击切换且能滑动切换功能的实现代码
Nov 25 Javascript
Angular value与ngValue区别详解
Nov 27 Javascript
如何实现iframe父子传参通信
Feb 05 Javascript
小程序中的箭头函数的具体使用
Jun 19 Javascript
react使用antd表单赋值,用于修改弹框的操作
Oct 29 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
优化使用mysql存储session的php代码
2008/01/10 PHP
php二维数组排序详解
2013/11/06 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
大学生如何写自荐信
2014/01/08 职场文书
企业给企业的表扬信
2014/01/13 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
工程项目合作意向书
2015/05/08 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android