Vant list组件
<van-list ref="vanlist" v-model="loading" offset="-70" :finished="finished" finished-text="没有更多了" @load="qryList">
1、List 会监听浏览器的滚动事件并计算列表的位置,当列表底部与可视区域的距离小于offset时,List 会触发一次 load 事件。offset可动态在属性里设置。如果滚动的list在css样式中加上了padding和margin,在计算offset时要加上,否则将不能上拉刷新。offset的值设置要小于或等于计算值的正数。
2、如果上拉加载了第二页,这时重新请求新的第一页数据,要将滚动条位置设置0,不然可能就会出现请求两页的情况。因为如上第一点所说的‘List 会监听浏览器的滚动事件并计算列表的位置,当列表底部与可视区域的距离小于offset时,List 会触发一次 load 事件’。设置滚动条位置这里可用refs.vanlist.scroller.scrollTop=0;
3、当上拉加载到没有更多数据时,需要将finished设为true;当请求新的数据时,要讲finished设为false,否则将不能进行下拉或上拉操作。
List官网注意事项:
1、为什么 List 初始化后会立即触发 load 事件? List 初始化后会触发一次 load 事件,用于加载第一屏的数据,这个特性可以通过immediate-check属性关闭。
2、为什么会连续触发 load 事件? 如果一次请求加载的数据条数较少,导致列表内容无法铺满当前屏幕,List 会继续触发 load 事件,直到内容铺满屏幕或数据全部加载完成。因此你需要调整每次获取的数据条数,理想情况下每次请求获取的数据条数应能够填满一屏高度。
3、loading 和 finished 分别是什么含义? List有以下三种状态,理解这些状态有助于你正确地使用List组件:
-
非加载中,loading为false,此时会根据列表滚动位置判断是否触发load事件(列表内容不足一屏幕时,会直接触发) -
加载中,loading为true,表示正在发送异步请求,此时不会触发load事件 -
加载完成,finished为true,此时不会触发load事件
在每次请求完毕后,需要手动将loading设置为false,表示加载结束
4、使用 float 布局后一直触发加载? 若 List 的内容使用了 float 布局,可以在容器上添加van-clearfix类名来清除浮动,使得 List 能正确判断元素位置
5、在 html、body 上设置 overflow 后一直触发加载? 如果在 html 和 body 标签上设置了overflow-x: hidden样式,会导致 List 一直触发加载。 html, body { overflow-x: hidden; } 这个问题的原因是当元素设置了overflow-x: hidden样式时,该元素的overflow-y会被浏览器设置为auto,而不是默认值visible,导致 List 无法正确地判断滚动容器。解决方法是去除该样式,或者在 html 和 body 标签上添加height: 100%样式。
6、List 的运行机制是什么? List 会监听浏览器的滚动事件并计算列表的位置,当列表底部与可视区域的距离小于offset时,List 会触发一次 load 事件。