Table 组件构建过程中遇到的问题与解决思路
2019-02-17 01:50:30来源:博客园 阅读 ()
在 GearCase
开源项目构建 Table
组件的过程中。遇到了各式各样的问题,最后尝试了各种方法去解决这些问题。
遇到的部分问题
checkbox
的全选和半选问题table
组件的排序请求方法table
组件固定表头问题- 固定表头时宽度计算的问题
- 点击
icon
排序事件无法触发的问题 - 轮动条
scrollbar
含有宽度让样式变形的问题
解决思路
- 使用
watch
监听选中项,与原始数据进行对比,修改indeterminate
的值来显示checkbox
的全选/半选/不选状态 - 使用点击
icon
图标来触发排序事件,排序事件为一个ajax
请求,相当于重新请求后端发过来的排序后的新数据,进行渲染即可 - 固定表头一开始的思路是使用
css
来固定table
中的thead
,达到固定表头的作用,过程中发现使用单纯的css
有诸多阻碍,放弃该种思路。转而使用JS + css
的方式。 拷贝一个相同的thead DOM
节点并绝对定位的最上方表头。 - 由于
thead
已经不再是以前table
组件自身的thead
,而是通过拷贝节点复制得到的,因此没有事件。使用let table2 = this.$refs.table.cloneNode(false)
进行克隆,并使用table2.appendChild(thead)
重新修改组件自身的thead
,这样就相当于重新拥有的事件。 - 由于表头固定时的节点是拷贝出来的,因此宽度和原表头不相同,一开始使用实时计算宽度的方式,后来考虑到性能和复杂度的问题,去除了实时更新计算宽度。改成用户自己传宽度值属性的方式。
- 一开始由于宽度是通过实时计算得到的,会引起轮动条
scrollbar
含有宽度让table
组件内部宽度无法和固定表头对齐的问题。一开始使用::-webkit-scrollbar { width: 0px; }
隐藏轮动条scrollbar
,但也可以进行滚动。此方法有缺陷,第一是仅适用于Chrome
内核的浏览器;第二是无法使用鼠标指针来拖动scrollbar
。后来由于宽度是用户自己传递的值,因此也不会再引起轮动条scrollbar
含有宽度让样式变形的问题
其他
Table
组件是一个较为复杂的组件,因为需要考虑到的要素和使用场景过多,在设计组件的同时也要兼顾到哪些属性是否可以作为用户传递,哪一些则不需要让用户自己传递。目前该组件的大致功能已经完成,细节仍在完善。
原文链接:https://www.cnblogs.com/evenyao/p/10383410.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JS实现table表格固定表头且表头随横向滚动而滚动 2020-02-07
- 详解bootstrap table表格的使用方法 2019-12-14
- Jquery 快速构建可拖曳的购物车DragDrop 2019-09-30
- vue mixins组件复用的方式 2019-09-23
- HBuilderX使用Vant组件库 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash