ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

vxe-table 表格组件实现数据滚动轮播

vxe-table 表格组件实现数据滚动轮播 在数据可视化大屏、监控中心或信息展示类后台中表格数据自动轮播跑马灯效果是常见需求——无需用户操作数据行按固定速度持续向上滚动营造动态、实时的视觉氛围。vxe-table 本身不内置轮播功能但借助其滚动控制 API 和虚拟滚动能力我们可以轻松实现一个平滑、可控、高性能的自动轮播表格。本文将逐步拆解实现方案并讲解滚动条隐藏、速度调节、触底停止等关键细节。需求分析与实现思路目标表格数据加载后自动以设定速度向上滚动滚动到底部后停止或循环并支持用户手动控制开始/停止、调整滚动速度、切换滚动条显示状态。核心思路通过 vxe-table 的 scrollTo({ top }) 方法精确控制滚动位置使用 setInterval或 setTimeout 递归每隔固定时间如 100ms将滚动位置增加指定像素值每次滚动后通过 getScrollData() 获取当前滚动状态判断是否已触底isBottom开启虚拟滚动virtualYConfig以支持大数据量本例加载 5000 行流畅滚动通过 scrollbarConfig.y.visible 控制滚动条显隐营造“无干扰”轮播效果核心配置与 API 详解表格基础配置constgridOptionsreactive({border:true,height:400,// 固定容器高度滚动基于此区域virtualYConfig:{// 开启纵向虚拟滚动支持海量数据enabled:true,gt:0// 数据量大于 0 即启用},scrollbarConfig:{// 滚动条配置y:{visible:hidden}// 隐藏纵向滚动条但滚动仍有效},columns:[/* ... */],data:[]// 初始空异步加载})关键点height 必须固定滚动轮播依赖可视区域高度virtualYConfig.enabled true 确保 5000 行数据渲染流畅否则 DOM 节点过多会卡顿scrollbarConfig.y.visible ‘hidden’ 隐藏滚动条视觉上更像“轮播”若需保留滚动条可设为 ‘auto’用户仍可手动拖拽与自动滚动共存滚动控制 API方法说明scrollTo({ top })将表格纵向滚动到指定像素位置top 为距离顶部的像素值getScrollData()返回当前滚动状态{ scrollTop, scrollHeight, clientHeight, isTop, isBottom }利用这两个 API我们可以实现步进式滚动const{scrollTop,isBottom}$grid.getScrollData()if(!isBottom){$grid.scrollTo({top:scrollTopstep})// step 为每次滚动的像素值}速度控制步进值过单选按钮绑定 speedNum取值 1、3、6、12作为每次滚动的像素增量。结合定时器间隔固定 100ms速度与 speedNum 成正比代码templatedivvxe-buttonstatusprimaryclickstartRollEvent开始/vxe-buttonvxe-buttonstatuserrorclickstopRollEvent停止/vxe-buttonbr/vxe-radio-groupv-modelscrollbarConfig.y.visiblevxe-radio-buttonchecked-valueautocontent显示滚动条/vxe-radio-buttonvxe-radio-buttonchecked-valuehiddencontent不显示滚动条/vxe-radio-button/vxe-radio-groupbr/vxe-radio-groupv-modelspeedNumvxe-radio-button:checked-value1content慢/vxe-radio-buttonvxe-radio-button:checked-value3content中/vxe-radio-buttonvxe-radio-button:checked-value6content快/vxe-radio-buttonvxe-radio-button:checked-value12content极速/vxe-radio-button/vxe-radio-groupvxe-gridrefgridRefv-bindgridOptionsv-ongridEvents/vxe-grid/div/templatescriptsetupimport{ref,reactive,onUnmounted}fromvueconstgridRefref()constspeedNumref(3)constscrollbarConfigreactive({y:{visible:hidden}})constgridOptionsreactive({border:true,height:400,loading:false,virtualYConfig:{enabled:true,gt:0},scrollbarConfig,columns:[{type:seq,width:70},{field:name,title:Name},{field:nickname,title:Nickname},{field:sex,title:Sex},{field:age,title:Age},{field:address,title:Address}],data:[]})constgridEvents{dataChange(){// 数据加载后启动startRollEvent()}}constloadList(){gridOptions.loadingtruesetTimeout((){constlist[]for(leti0;i5000;i){list.push({id:100000i,name:Testi,nickname:Ti,role:Develop,sex:Man,age:28,address:Shenzheni})}gridOptions.loadingfalsegridOptions.datalist},250)}letautoTimenullconsthandleScrollTo(){autoTimesetTimeout((){const$gridgridRef.valueif($grid){const{scrollTop,isBottom}$grid.getScrollData()$grid.scrollTo({top:scrollTopspeedNum.value})// 如果触底则结束滚动if(!isBottom){handleScrollTo()}}},100)}conststartRollEvent(){stopRollEvent()handleScrollTo()}conststopRollEvent(){// 销毁滚动if(autoTime){clearTimeout(autoTime)}}onUnmounted((){stopRollEvent()})loadList()/script关键细节与注意事项触底停止 vs 循环滚动上述代码中滚动到底部后自动停止。若需无限循环即到底后跳回顶部重新开始可在 isBottom 为 true 时执行if(isBottom){$grid.scrollTo({top:0})// 瞬间跳回顶部// 继续滚动需在跳转后再启动下一次setTimeout(()stepScroll(),0)}else{// 正常步进}但需注意scrollTo 跳转是瞬间完成的视觉上可能突兀可结合 scrollTop 重置的平滑动画vxe-table 暂不支持动画可考虑 requestAnimationFrame 插值。滚动条显隐与用户交互隐藏滚动条visible: ‘hidden’后用户仍可通过鼠标滚轮或触摸板滚动但看不到滚动条滑块适合大屏展示。显示滚动条visible: ‘auto’时自动滚动与手动拖拽会共存但用户拖拽会干扰自动滚动因为滚动位置被改变。如需禁用用户手动滚动可设置 scrollbarConfig.y.visible ‘hidden’ 并同时设置 CSS pointer-events: none 阻止鼠标滚轮但可能影响交互需按场景取舍。性能优化虚拟滚动必须开启virtualYConfig.enabled: true否则 5000 行全量渲染会导致严重的性能问题。定时器间隔建议不低于 50ms避免过度频繁的 DOM 操作导致掉帧。数据量极大如数万行时虚拟滚动仍能保持流畅但 scrollTo 的计算量会随滚动位置增加而略微上升通常可接受。清除定时器务必在组件销毁前清除定时器否则可能导致内存泄漏或滚动继续。已在 onUnmounted 中处理。通过 vxe-table 的 scrollTo 和 getScrollData API我们仅用少量代码就实现了数据表格的自动轮播。结合虚拟滚动和滚动条控制既能支撑大数据量又能提供干净、专注的视觉体验。该方案可直接用于大屏数据展示、实时监控列表等场景且扩展性强循环、暂停、速度调节等均可按需定制https://vxetable.cn
返回列表