vue实现聊天记录向上加载上一页

需求:模仿PC企业微信聊天记录,实现向上滚动加载上一页,触底加载下一页,并处理滚动条位置

1、监听盒子滚动事件(盒子id:historyList)

	//这里我在数据请求回来后处理
		this.$nextTick(() => {
				//拿DOM元素
                this.hisListEle = document.getElementById("historyList"); 
                
                //添加滚动条监听事件
                this.hisListEle.addEventListener("scroll", this.handlerMsgInfoScroll);
                
                //拿到当前的scrollHeight
                let heigh = document.getElementById("historyList").scrollHeight;
				
				//向上滚动的时候,需要计算要滚动到哪里
                let sroll = heigh - this.preSrollHeight;
                
                //设置滚动条位置
                this.hisListEle.scrollTo(0, sroll);
                this.preSrollHeight = heigh;
            });

2、滚动条触顶,触底事件处理

// 监听滚动条
    handlerMsgInfoScroll() {
      // 节流
      if (this.loadingState) return;

	  //触顶
      if (!this.isTopEnd && this.hisListEle.scrollTop <= 50) {
        this.topPage++;
        this.isTop = true	// 控制请求数据方向
        this.getPageData();
      }

      // 触底加载下一页,如果没有数据了,就不再发请求
      if( this.isBottomEnd) return
      if (
        this.hisListEle.scrollTop + this.hisListEle.clientHeight ===
        this.hisListEle.scrollHeight
      ) {
        this.bottomPage++;
        this.isTop = false // 控制请求数据方向
        this.getPageData();
      }

    },

3、数据请求处理

	async getPageData(){
		//如果是触顶,并且没数据了,则return
		if(this.isTopEnd && this.isTop ) return
		
		//如果是触底,并且没数据了,则return
		if(this.isBootmEnd && !this.isTop) return
		
		//请求状态,节流
		if(this.loadingState) return
		this.loadingState = true
		
		//判断当前向上还是向下加载,拿对应的页码
		let paramsData = Object.assign({}, this.paramsData);
		if(this.isTop){ paramsData.page = this.topPage}
		if(!this.isTop){ paramsData.page = this.bottomPage}
		
		//发请求获取数据
		await getData(paramsData).then(res=>{
			let arr = res.data
				
			//判断当前加载方向,新数据放前面还是放后面
			
			if(this.isTop){
				this.msgList.unshift(...newArr);
			}else{
				this.msgList.push(...arr);
			}
		})
		




	}
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值