el-table表头抖动的问题

1、问题

elementUI中的el-table左右滑动时,表头相对于表格内容会有延迟,如下图,具体可去elementUI官网中查看。

2、为什么会有这个问题

因为el-table的实现是用两个表格来实现的,表头是一个table,内容是一个table,el-table源码中让table1跟着table2滑动的做法是:给table2添加一个监听事件,一旦table2滑动,就重新计算table1的位置。

 

 3、解决

 其实elementUI 2.15.9版本中已经修复了这个问题。,我们看一下github里el-table的源码,看看怎么解决的。地址:Release v2.15.9 · ElemeFE/element (github.com)

 源码:

415行,原来的代码为了性能优化,在这里写了个throttle节流函数。

446、453行,2.15.9版本中,把表头绑定的事件和解绑事件函数换成了自己写的一个onScroll函数。

436行,onScroll函数,首先判断浏览器是否支持requestAnimationFrame(这个浏览器支持的api比自己写的节流性能有很大提升)这个API,如果不支持,就还是用原来手写的节流函数;如果支持就使用这个API,将原来的节流函数作为参数传进去。

432行,改了一下之前的节流函数,将时间从20ms改到了16ms,原因是一般计算机显示器的刷新率都是60HZ,也就是浏览器每秒需要重绘60次,用1秒除以60,也就是1000ms/60,约等于16.6666667,那么最合适的重绘间隔也就是16ms或者17ms,这个时间能实现最平滑的动画过渡效果,如果低与这个值,用户也感知不到,且会造成浪费性能,所以16ms最合适。

 所以总结,新版elementUI解决这个问题的方法:

1、把节流函数换成了requestAnimationFrame函数。

2、把手写节流的事件从20ms换到了最适合浏览器的16ms。

(ps:不过element UI官网还是2.15.7版本,但是github上更新到了2.15.9版本)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
为了在el-table表头中使用el-popover,您需要为每个popover绑定一个独特的变量。以下是一个例子,展示了如何在el-table表头中使用el-popover: ```html <template> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> <template slot="header"> <div> 日期 <el-popover placement="bottom" width="200" trigger="hover" v-model="popoverVisible1" > <p>这是一个日期选择器</p> <el-date-picker v-model="date" type="date" placeholder="选择日期"></el-date-picker> </el-popover> <el-button slot="reference" icon="el-icon-question" size="mini" @click="popoverVisible1 = true" ></el-button> </div> </template> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> <template slot="header"> <div> 姓名 <el-popover placement="bottom" width="200" trigger="hover" v-model="popoverVisible2" > <p>这是一个输入框</p> <el-input v-model="name" placeholder="请输入姓名"></el-input> </el-popover> <el-button slot="reference" icon="el-icon-question" size="mini" @click="popoverVisible2 = true" ></el-button> </div> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { date: '2022-01-01', name: '张三' }, { date: '2022-01-02', name: '李四' }, { date: '2022-01-03', name: '王五' } ], popoverVisible1: false, popoverVisible2: false, date: '', name: '' }; } }; </script> ``` 在这个例子中,我们为每个el-popover绑定了一个独特的变量(popoverVisible1和popoverVisible2),这样每个popover就可以正常渲染了。同时,我们还为每个popover添加了一个el-button,当用户将鼠标悬停在这个按钮上时,popover就会显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值