Vant list组件

4,324 阅读3分钟

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,this.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 事件。