欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue-infinite-scroll 滚动分页加载

程序员文章站 2022-03-29 08:30:55
...

1、安装插件

npm i --save v-infinite-scroll

2、使用

main.js

import infiniteScroll from 'vue-infinite-scroll'

Vue.use(infiniteScroll);

.vue文件

  <div class="content clearfix">
  	   <ul class="clearfix">
  	   	  <li class="gl-list-con" v-for="item in goodsList">
  	   	  	 <div class="img"><img :src="imgsrc+item.productImage"></div>
  	   	  	 <div class="txt">
  	   	  	 	  <h3>{{item.productName}}</h3>
  	   	  	 	  <p class="detail">{{item.salePrice}} </p>
  	   	  	 	  <p class="addcar"><span>加入购物车</span></p>
  	   	  	 </div>
  	   	  </li>
  	   </ul> 
  	   <!--v-infinite-scroll-->
  	   <div v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="30" class="clearfix">
                 .....加载中
       </div>
  	    	   
  </div> 
export default{ 
	data(){ 
		return {
			goodsList:[],
			sortFlag:true,    //默认升序
			page:1,
			pageSize:8,
			imgsrc: '../static/images/',
			busy:true
		}
	},
	mounted(){
       this.getGoodslist();		
	},
	methods:{
		getGoodslist(flag){
			var param={
				page:this.page,
				pageSize:this.pageSize,
				sort:this.sortFlag?1:-1  //升序或者降序排列
			}
			axios.get("/goods",{
				params:param
			}).then((response)=>{
				let res=response.data;
				console.log('res:'+res.status);
				if(res.status=="0"){
					if(flag){//如果flag为true则表示分页						
					   	this.goodsList=this.goodsList.concat(res.result.list);  //concat数组串联进行合并
					   	if(res.result.count==0){  //如果数据加载完 那么禁用滚动时间 this.busy设置为true
					   		console.log('res.result.count'+res.result.count);
					   		console.log(this.goodsList);
					   		this.busy=true;
					   		console.log('this.busy:'+this.busy);
					   	}else{ 
					   		this.busy=false;
					   		console.log('res.result.count'+res.result.count);
					   	}
					}
					else{//第一次进入页面 完全不需要数据拼接的
						this.goodsList=res.result.list;
						this.busy=false;
					}
				}else{
					this.goodsList=[]
				}
		  })				
	    },
	    sortGoods(){
	    	this.sortFlag=!this.sortFlag;
	    	this.page=1;
	    	this.getGoodslist();
	    	
	    },
	    //当属性滚动的时候  加载  滚动加载
	    loadMore(){	    	
	    	this.busy=true  //将无限滚动给禁用
	    	setTimeout(() => {  //发送请求有时间间隔第一个滚动时间结束后才发送第二个请求
	    	   this.page++;  //滚动之后加载第二页
	    	   this.getGoodslist(true);
            }, 500);	    	
	    }    
	},
   components:{
      navheader,
      navfooter,
      navbread
    }
}   
</script>