使用vue-infinite-scroll实现无限滚动

﹏ヽ暗。殇╰゛Y 2021-11-22 12:58 714阅读 0赞

今天在移动端项目中遇见一个需求,需要数据无限滚动。在这里总结一下使用心得

首先引入:

  1. npm install vue-infinite-scroll --save

在vue中的main.js中引入:

  1. import infiniteScroll from 'vue-infinite-scroll'
  2. Vue.use(infiniteScroll)

在代码中使用:

  1. <template>
  2. <section>
  3. <div class="wrap"
  4. v-infinite-scroll="loadMore"
  5. :infinite-scroll-disabled="loading"
  6. infinite-scroll-distance="20"
  7. >
  8. <div v-for="(item, index) in list" :key="index" class="div">
  9. <li>{
  10. {item.text}}</li>
  11. </div>
  12. </div>
  13. <section v-show="loadingTip">
  14. <span>加载中···</span>
  15. </section>
  16. </section>
  17. </template>
  18. <script>
  19. export default {
  20. data() {
  21. return {
  22. loading:false,
  23. loadingTip:false,
  24. list:[]
  25. }
  26. },
  27. created() {
  28. const arr = []
  29. for(let i=0;i<10;i++){
  30. arr.push({time:'2019-7-23:'+i,text:`hello${i}`})
  31. }
  32. this.list = arr;
  33. this.loadingTip = true
  34. },
  35. methods :{
  36. loadMore() {
  37. this.loading = true;
  38. setTimeout(() => {
  39. const arr = [];
  40. for (let i=0; i<2 ;i++) {
  41. arr.push({time:'2019年7月23日:'+i,text:`传奇永不息,Legends Never Die`})
  42. }
  43. this.list.push(...arr);
  44. this.loading = false;
  45. },1000)
  46. },
  47. }
  48. }
  49. </script>
  50. <style>
  51. .div{
  52. height: 50px;
  53. width: 100%;
  54. text-align: center;
  55. }
  56. </style>

上面代码效果为:当滚动到数据底部距离页面底部还有20px时,触发loadMore回调函数,一秒过后加载两个数据

v-infinite-scroll="loadMore"表示回调函数是loadMore;``infinite-scroll-disabled="loading"表示由变量loading决定是否执行loadMore. false则执行loadMoretrue则不执行。infinite-scroll-distance="20"这里20决定了页面滚动到离页尾多少像素的时候触发回调函数loadMore,20是像素值。通常我们会在页尾做一个几十像素高的“正在加载中…”,或者放一个加载图标。

效果图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21vemh1MTk5Nw_size_16_color_FFFFFF_t_70

当从服务器拿去数据时,将回调loadMore的setTimeout换成ajax请求

发表评论

表情:
评论列表 (有 0 条评论,714人围观)

还没有评论,来说两句吧...

相关阅读