vue虚拟滚动(vue-virtual-scroll-list)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue虚拟滚动(vue-virtual-scroll-list)相关的知识,希望对你有一定的参考价值。

参考技术A ​ 在项目中有一个sku表(是一个尺码和颜色乘积的表格),假如有10个颜色,20个尺码,那这个sku表就会有200行。有一个客户有100个颜色的需求,100个颜色的时候如果有5个尺码,就会有500行,这样会使页面很卡,于是找到了vue-virtual-scroll-list这个插件。

剩下的参数 https://www.npmjs.com/package/vue-virtual-scroll-list
官网地址 https://tangbc.github.io/vue-virtual-scroll-list/#/

如上图,他只渲染keeps传入的个数,滚动时通过改变padding的值来模拟滚动,里面的每一个item在滚动时动态替换里面的值

核心源码如下

永远之渲染props的keeps传入的个数,所以这样不会卡

Vuescroll - 一个基于Vue的虚拟滚动条

参考技术A

推荐一个基于Vue的滚动条-Vuescroll

GitHub地址: vuescroll

以前接触过一个后端管理系统, 叫H+, 偶尔发现它用的是左侧菜单没有滚动条, 于是, 我仔细查看dom, 发现H+ 左侧菜单的旁边有一个小的DIV, 我拖动的, 菜单竟然也能滚动, 我明白了, 这是用的虚拟滚动条, 我感觉这个挺不错的, 后来查看这个虚拟滚动条的源码, 发现是一个款叫做SlimScroll的基于jquery的库。由于我对Vue比较熟悉,所以,我想用Vue做一个类似的。

一开始用slimScroll的方法并不理想, slimscroll的滚动内容的方法是:

这有个2致命的缺点:

这两点带来了极差的UI体验!

后来, 我无意中发现了element-ui也是使用了虚拟滚动条, 并且效果很好, 尤其是在手机端滑动, 每次滑动结束手离开屏幕都能继续滑行一段距离, 比slimscroll效果要好,于是我就去element-ui的github上翻scrollbar的源码, 通过阅读源码, 我发现element-ui触发滚动的时机是在onscroll的时候, 也就是说, 把滚动内容的父元素设置为 overflow:scroll , 然后监听父元素的onScroll事件, 在onScroll事件的callback里面移动滚动内容即可。 经过我的一番改进, 终于能做到和element-ui滚动条滚动的一个效果了。

后来,我又接触到了几个不错的, 并把它们的特点加进来了。 如element-resize-detector, scroller, smooth-scroll, bertter-scroll等等。 现在的Vuescroll已经升级为一个功能强大的滚动条了。

它的基本特点有:

总的来说,Vuescroll不仅仅只一个滚动条, 你可以用它制作一个轮播图、时间选择器、能够自动侦测内容发生变化的一个插件等等。

部分参考资料

以上是关于vue虚拟滚动(vue-virtual-scroll-list)的主要内容,如果未能解决你的问题,请参考以下文章

Vuescroll – 一个基于Vue的虚拟滚动条

Vue3 实现列表虚拟滚动

vue虚拟滚动(vue-virtual-scroll-list)

Vuescroll 是一个基于 vue.js 2.X的虚拟滚动条

Vue中 引入使用 vue-virtual-scroll-list 通过虚拟列表滚动加载,解决数据量过多时 页面卡顿体验差的问题

Vue如何渲染十万行数据(虚拟长列表)