纯JS实现加载更多(VUE框架)

<template>
    <div class = 'car_list' reft='scrollobx' @scroll='scrollready($event)'>
    </div>
</template>
<script>
    export default {
        data() {
            return  {
                lengthThreshold: 50, //当滑动到距离低端50px时,更新数据
                timeThreshold: 300, 
                promise: null
            }
        },
        methods: {
            // 滚动加载列表
            scrollready() {
                if(this.shouldScroll()) {
                    if (this.promise) {
                        return;
                    }
                    // 进行加载
                    this.fn();
                    // 防止多次滑动,频繁请求后台资源
                    let self = this;
                    this.promise = setTimeout(() => {
                        self.promise = null;
                    }, this.timeThreshold);
                }
            },
            // 调用父组件请求资源服务
            fn() {
                this.$emit('scrollChange');
            },
            shouldScroll() {
                if(document.scrollTop === 0) {// 滑动距离为0,还没开始滑动
                    return false;
                }
// 列表高度 - 列表可视高度 - 滑动的高度 < 50px , 则加载更多 return this.$refs.scrollbox.scrollHeight - this.$refs.scrollbox.clientHeight - this.$refs.scrollbox.scrollTop < this.lengthThreshold; }, } } </script>

 

父组件的请求服务方法:

queryCarApplyShareList() {
        this.Load = true;
        CarResources.methods.queryCarApplyShareList(this.http, this.pageNo, this.pageSize).then((res) => {
          if (res && res.status === 200) {
               if (this.pageNo === 1) { // 加载第一页数据
                   this.CarList = res.data || [];
               } else { // 加载更多
                  this.CarList = this.CarList.concat(res.data);
               }
               this.IsLastPage = res.data.length === 0
          }
          this.Load = false;
       }, () => {
          this.Load = false;
          console.log('接口报错');
       });
},

  

posted @ 2017-11-10 17:14  彭胜光  阅读(796)  评论(0编辑  收藏  举报