不爱学习的小码农 2023-03-07 10:54 采纳率: 12.5%
浏览 7

使用mescroll完成虚拟列表

使用mescroll插件上拉加载数据会全部都渲染出来请问有使用过这个插件做过虚拟列表代优化的老哥吗,或者配合其他插件使用也可以。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-07 12:31
    关注
    • 请看👉 :MeScroll 移动端刷新,分页
    • 除此之外, 这篇博客: mescroll使用上拉加载、下拉刷新中的 一个页面多次调用mescroll 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 注:this.navData[1].mescroll.resetUpScroll(); // 点击筛选重置方法

      <template>
        <div class="healthy-bean-record-c">
          <div class="top">
            [外链图片转存失败(img-pPYyrr3K-1562119870434)(https://mp.csdn.net/assets/images/mine/tixianjilu.png)]
          </div>
          <div class="navLine">
            <!-- <van-tabs v-model="active" swipeable animated> -->
            <van-tabs v-model="active" swipeable>
              <van-tab :title="navData[0].tit">
              
              	//参数名和初始化方法名需进行区分
                <mescroll-vue ref="mescroll0" :up="mescrollUp0" @init="mescrollInit0">
                  <div class="item" v-for="(item,index) in navData[0].dataList">
                    <span class="s1">{{item.desc}}</span>
                    <span class="s2">{{item.addtime}}</span>
                    <span class="s3" v-if="item.status==1">+{{item.num}}健康豆</span>
                    <span class="s3" v-else-if="item.status==2">-{{item.num}}健康豆</span>
                  </div>
                </mescroll-vue>
              </van-tab>
              <van-tab :title="navData[1].tit">
      			
      			//参数名和初始化方法名需进行区分
                <mescroll-vue ref="mescroll1" :up="mescrollUp1" @init="mescrollInit1">
                  <div class="item" v-for="(item,index) in navData[1].dataList">
                    <span class="s1">{{item.desc}}</span>
                    <span class="s2">{{item.addtime}}</span>
                    <span class="s3">+{{item.num}}健康豆</span>
                  </div>
                </mescroll-vue>
              </van-tab>
              <van-tab :title="navData[2].tit">
      
      		//参数名和初始化方法名需进行区分
                <mescroll-vue ref="mescroll2" :up="mescrollUp2" @init="mescrollInit2">
                  <div class="item" v-for="(item,index) in navData[2].dataList">
                    <span class="s1">{{item.desc}}</span>
                    <span class="s2">{{item.addtime}}</span>
                    <span class="s3">-{{item.num}}健康豆</span>
                  </div>
                </mescroll-vue>
              </van-tab>
            </van-tabs>
          </div>
        </div>
      </template>
      <script>
      import MescrollVue from "mescroll.js/mescroll.vue";
      import axios from "axios";
      import qs from "qs";
      export default {
        data: function() {
          return {
            // 三个配置项
            mescrollUp0: {
              callback: this.upCallback
            },
            mescrollUp1: {
              callback: this.upCallback
            },
            mescrollUp2: {
              callback: this.upCallback
            },
            // 使用数组接收三个列表
            navData: [
      		        {
      		          tit: "全部",
      		          mescroll: null,
      		          dataList: []
      		        },
      		        {
      		          tit: "收入",
      		          mescroll: null,
      		          dataList: []
      		        },
      		        {
      		          tit: "支出",
      		          mescroll: null,
      		          dataList: []
      		        }
            	]
          };
        },
        components: { MescrollVue },
        methods: {
         // 三个初始化方法
          mescrollInit0(mescroll) {
            this.navData[0].mescroll = mescroll;
          },
          mescrollInit1(mescroll) {
            this.navData[1].mescroll = mescroll;
          },
          mescrollInit2(mescroll) {
            this.navData[2].mescroll = mescroll;
          },
          // 一个公用的回调函数,使用if判断是哪个
          upCallback(page, mescroll) {
            console.log(page);
            console.log(this.active);
            if (this.active === 0) {
      	        //全部
      	        this.$http("/cml/api/newuser/jiankang", {
      	          /*pageNum: page.num,
      	          pageSize: this.pageSize,*/
      	          status: -1
      	        })
      	          .then(res => {
      	            let arr = res.data;
      	            if (page.num === 1) {
      	              this.navData[0].dataList = [];
      	            }
      	            this.navData[0].dataList = this.navData[0].dataList.concat(arr);
      	            this.$nextTick(() => {
      	              mescroll.endSuccess(arr.length, false);
      	            });
                })
                .catch(err => {
                  mescroll.endErr();
                });
            } else if (this.active === 1) {
      	        // 收入
      	        this.$http("/cml/api/newuser/jiankang", {
      	          /*pageNum: page.num,
      	          pageSize: this.pageSize,*/
      	          status: 1
      	        })
      	          .then(res => {
      	            let arr = res.data;
      	            if (page.num === 1) {
      	              this.navData[1].dataList = [];
      	            }
      	            this.navData[1].dataList = this.navData[1].dataList.concat(arr);
      	            this.$nextTick(() => {
      	              mescroll.endSuccess(arr.length, false);
      	            });
                })
                .catch(err => {
                  mescroll.endErr();
                });
            } else {
      	        // 支出
      	        this.$http("/cml/api/newuser/jiankang", {
      	          /*pageNum: page.num,
      	          pageSize: this.pageSize,*/
      	          status: 2
      	        })
      	          .then(res => {
      	            let arr = res.data;
      	            if (page.num === 1) {
      	              this.navData[2].dataList = [];
      	            }
      	            this.navData[2].dataList = this.navData[2].dataList.concat(arr);
      	            this.$nextTick(() => {
      	              mescroll.endSuccess(arr.length, false);
      	            });
      	          })
      	          .catch(err => {
      	            mescroll.endErr();
      	          });
      	      }
          }
        }
      };
      </script>
      <style lang="less" scoped>
      /*固定高度*/
      .mescroll {
        position: fixed;
        top: 6.07rem;
        bottom: 0;
        height: auto;
        /*如设置bottom:50px,则需height:auto才能生效*/
      }
      
      .van-tabs--line {
        padding-top: 1.32rem;
      }
      
      /deep/.van-tabs--line .van-tabs__wrap {
        height: 1.32rem;
      }
      
      .healthy-bean-record-c {
        &:before {
          content: "";
          position: fixed;
          top: 0;
          bottom: 0;
          left: 0;
          right: 0;
          width: 100%;
          height: 100%;
          z-index: -1;
          background-color: white;
        }
      
        .top {
          width: 100%;
          height: 3.4rem;
          text-align: center;
          border-bottom: 0.05rem solid #d9d9d9;
      
          .img {
            width: 2.26rem;
            padding-top: 0.6rem;
          }
        }
      
        .item {
          margin: 0.8rem 0.74rem;
          display: flex;
          justify-content: space-between;
      
          .s1 {
            width: 30%;
            font-size: 0.34rem;
            color: #232323;
          }
      
          .s2 {
            width: 45%;
            font-size: 0.32rem;
            color: #232323;
            text-align: center;
          }
      
          .s3 {
            width: 25%;
            font-size: 0.31rem;
            color: #ac415d;
            text-align: right;
          }
        }
      }
      </style>
      
      
    评论

报告相同问题?

问题事件

  • 创建了问题 3月7日

悬赏问题

  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧