javascript实现无限滚动表格
前言
手机端有一个表格,沾满整个屏幕,现在想实现的就是表格的表头固定,然后下面的数据可以实现无限滚动
1.静态滚动table
下面的css和表格,实现了手机端出现滚动条,并且表格表头固定。
1 | <table class="datatable"> |
1 | table tbody { |
最后的效果:
1.tbody 滚动条设置 结合了table-layout:fixed;和display:block
2.表格table中thead固定,tbody超出高度出现滚动条 width: calc(100% - 1em)
3.CSS控制表头不动,表单内容滚动 给tbody增加滚动条后发现该滚动条未生效,给tbody增加position:fixed;属性后滚动条样式生效,但是整体样式错乱,如下图显示。最后解决方法为将thead和tbody均转化为块状元素,表单可正常展示。
4.火狐不支持calc吗? 100%改为了 100vh,max-height: calc(100vh - 100px);
5.关于height:100%和height:100vh的区别 vh就是当前屏幕可见高度的1%, 但是当元素没有内容时候,设置height:100%,该元素不会被撑开,此时高度为0,但是设置height:100vh,该元素会被撑开屏幕高度一致。
6.旧版火狐浏览器使用calc()计算元素高度(height)
2.无限滚动表格
实现无限分页的过程大致如下:
1 视窗滚动到底部;
2 触发加载,添加到现有内容的后面。
因此,可能会出现两种情况:
1 当页面的内容很少,没有出现滚动条;触发加载页面事件,直到加载到满足条件时停止加载;
2 当页面的内容很多,出现了滚动条
我这里主要用到了两个方法,第一个就是在页面加载的初期,判断数据有没有出现滚动条,第二个就是监听滚轮事件,判断列表的底部有没有到阈值 100,如果到了,就进行数据加载。我这里还有一个地方,因为scroll函数是会触发多次的,为了防止多次触发数据加载,使用 datafetch 这个标志进行数据加载的判断,当执行一次数据加载时设置为 ture,数据加载完就设置为 false,可以进行第二次数据加载了。
1 | /** |
參考文章:
1.原生js监听页面滚动事件 不同的浏览器获取页面滚动距离的方法不一样, (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop)
2.10行代码实现页面无限滚动 这里用到了 IntersectionObserver 这个方法进行了页面元素的监听
3.设计高性能无限滚动加载,了解高效页面秘密 这里的事件用的不是scroll,而是用的是定时器的方法实现的,还有很多的内容,讲了一个基本插件的开发。
4.主流浏览器对 clientHeight 和 scrollHeight 的解释 IE 和 Firefox 表现一致,clientHeight 和 scrollHeight 两者的值相等,并且等于视口大小;Chrome 中,二者不一致。 scrollHeight 是内容区域的大小,clientHeight 的值是视口的大小。