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);
			}
		})
		




	}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
实现Vue中的上一页和下一页功能,你可以使用Vue Router来处理页面导航。Vue Router是Vue.js官方提供的路由管理器,可以帮助我们实现单页面应用程序(SPA)中的页面切换和导航。 下面是一种实现一页和下一页功能的方法: 1. 首先,确保你已经安装并引入了Vue Router。你可以通过npm或者CDN来安装和引入Vue Router。 2. 在Vue组件中,创建一个包含多个路由的路由器实例,并为每个路由指定对应的组件。 3. 在Vue组件的模板中,使用`<router-link>`标签来实现页面导航。`<router-link>`是Vue Router提供的用于生成链接的组件,可以自动添加正确的`href`属性并监听点击事件。 4. 在Vue组件的方法中,使用`this.$router.push()`方法来切换到上一页或者下一页。你可以根据当前页面的路由路径和参数来动态计算上一页和下一页的路径,并通过`this.$router.push()`方法进行导航。 下面是一个简单的示例: ``` <template> <div> <router-link :to="previousPage">上一页</router-link> <router-link :to="nextPage">下一页</router-link> </div> </template> <script> export default { computed: { previousPage() { // 根据当前页面的路由路径和参数计算上一页的路径 // 返回上一页的路径,例如 '/page/2' }, nextPage() { // 根据当前页面的路由路径和参数计算下一页的路径 // 返回下一页的路径,例如 '/page/4' } }, methods: { goToPreviousPage() { this.$router.push(this.previousPage); }, goToNextPage() { this.$router.push(this.nextPage); } } } </script> ``` 通过上面的方法,你可以根据当前页面的路由路径和参数动态计算上一页和下一页的路径,并通过点击上一页和下一页的链接来切换页面。 希望这个示例对你有所帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值