在聊天发送信息
data: { return { form: { page: 0 }, }} /** 加载最新的数据以及向上滚动加载历史更多数据**/ async getChatDataOlds() { this.isLoadingMore = true; const res = await getChatDataOld(this.form.id, this.form.page) if (res && res.length > 0) { let list = res.reverse(); list = list.concat(this.messagescontent); this.messagescontent = list; this.form.page = this.messagescontent[0].id; this.splitArrayByTimestampDiff(this.messagescontent); // 加载新消息后稍微向下滚动一点 this.$nextTick(() => { const scrollPositionBefore = this.$refs.messagesContainer.scrollTop; const newScrollHeight = this.$refs.messagesContainer.scrollHeight; let scrollToPosition = scrollPositionBefore + Math.min(400, newScrollHeight - scrollPositionBefore - this.$refs.messagesContainer.clientHeight); if (scrollToPosition < newScrollHeight) { this.$refs.messagesContainer.scrollTop = scrollToPosition; } }); } else { this.hasMore = false; } this.isLoadingMore = false; },/** 点击切换用户 **/handleBgColor(val, item) { this.inputMessage = "" this.leftList[val].unreadNumber = 0; this.userName = item.trueName this.highlightedIndex = val this.form.userId = 'PC_' + item.userId this.form.id = item.userReceiveId this.form.chatType = item.chatType this.form.page = 0 this.messagescontent = [] if (this.form.id) { this.getChatDataOlds() }},/** 向上滚动加载**/handleScroll() { const scrollPosition = this.$refs.messagesContainer.scrollTop; if (scrollPosition < 50 && this.hasMore && !this.isLoadingMore) { // this.getChatDataOlds(this.form.id, this.form.page); this.getChatDataOlds(); }},
this.form.id是对方的聊天用户id,this.form.page初始化为0,是拿到getChatDataOld最新的数据,在这些代码中向上加载拿到this.messagescontent[0].id下标第一次的id加载更多历史数据,现在遇到的问题是第一次点击切换用户,往上加载更多历史数据没有问题,当切换用户再切换回来,向上滚动不会再加载历史更多数据了,大佬们,怎么处理这个呢
问题出现在当你切换用户时,你重置了this.form.page
为0,并且清空了this.messagescontent
数组。当再次切换回同一个用户时,因为this.form.page
是0,并且this.messagescontent
是空的,程序认为没有更多历史数据需要加载,因此不再调用getChatDataOlds
函数加载更多数据。
要解决这个问题,你需要保存每个用户的最后加载的page
值。一种方法是在data
中为每个用户维护一个page
值,或者使用Vuex(如果你正在使用Vuex管理状态)或其他状态管理库来存储这个值。
以下是一个简化的例子,展示了如何在组件的data
中为每个用户维护一个page
值:
data() { return { form: { userId: '', id: '', page: 0, chatType: '' }, messagescontent: [], hasMore: true, isLoadingMore: false, userPages: {} // 用于存储每个用户的page值 };},methods: { async getChatDataOlds() { // ... 省略其他代码 ... if (res && res.length > 0) { // ... 省略其他代码 ... // 更新用户的page值 this.userPages[this.form.id] = this.messagescontent[0].id; // ... 省略其他代码 ... } // ... 省略其他代码 ... }, handleBgColor(val, item) { // ... 省略其他代码 ... // 设置当前用户的page值为之前保存的page值(如果有的话) this.form.page = this.userPages[item.userReceiveId] || 0; // ... 省略其他代码 ... }, // ... 省略其他方法 ...}
在handleBgColor
方法中,当你切换用户时,你检查this.userPages
对象中是否有为这个用户保存的page
值。如果有,就使用这个值作为新的this.form.page
;如果没有,就使用默认值0。
这样,当你切换回之前的用户时,this.form.page
会是你之前为该用户保存的page
值,因此当向上滚动时,会正确地加载更多历史数据。
确保在适当的时候(比如组件销毁时)清理this.userPages
对象,以避免内存泄漏。如果用户在多个会话或窗口中打开应用,并且你需要在这些会话间共享状态,你可能需要考虑使用本地存储(如localStorage)或其他持久化方法。
代码如下html结构 js代码 /applet/user/massage/getChatDataOld/179/0 vue聊天框向上滚动加载更多, res[0].id 数组第一条id, this.form.page是默认是0,后台说向上滚动条加载要拿数组的第一个id放到接口上,全部加载出来,现在上面的逻辑上这样是有问题的,往上滚动了会加载一些,往下滚动了下面的数据不见了,不是 我想要的,我想要的全
js部分 vue聊天框向上滚动加载更多,比如this.form.page是10条信息,滚动到这里有个查看更多信息的字眼,再向上滚动加载数据,getChatDataOld这个是加载接口,或者点击查看更多信息向上滚动加载,这样的功能怎么实现呢
我只是想知道,只有在div.loading可见的情况下,如何才能在scroll上实现更多的数据。 通常我们寻找页面高度和滚动高度,看看我们是否需要加载更多的数据。但是下面的例子有点复杂。 下面的图片是完美的例子。下拉框上有两个。加载div。当用户滚动内容时,无论哪个可见,都应该开始为其加载更多数据。 因此,我如何才能找出是否加载div是可见的用户呢?所以我可以开始加载该div的数据。
这是我的代码: 我想滚动我的卷轴,但不能,因为#refresh重新加载每3000。有人知道如何解决这个问题吗?
本文向大家介绍vue2滚动条加载更多数据实现代码,包括了vue2滚动条加载更多数据实现代码的使用技巧和注意事项,需要的朋友参考一下 解析: 判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop、clientHeight、scrollHeight。 scrollTop为滚动条在Y轴上的滚动距离。 clientHeight为内容可视区域的高度。 scrollHeight为内容可视区域的高
问题内容: 我正在尝试检索具有ajax加载向下滚动功能alla Twitter的页面中的元素。由于某种原因,此功能无法正常运行。我添加了一些打印语句以对其进行调试,但我总是得到相同数量的项目,然后函数返回。我在这里做错了什么? 问题答案: 尝试介于两者之间 注意:硬睡眠只是为了证明它有效。请改用waits包来等待智能状态。