2.2 KiB
2.2 KiB
自动滚动修复测试说明
修复内容
已修复聊天页面自动刷新后自动滚动到底部的问题,现在实现智能滚动:
修复的问题
- ✅ 轮询刷新时不再强制滚动到底部
- ✅ 用户在底部时,新消息会自动滚动显示
- ✅ 用户在上方浏览历史消息时,保持当前位置
- ✅ 添加了延迟处理确保滚动生效
修改的文件
pages/contact/index.js- 修改了getMessages()函数的滚动逻辑
测试步骤
1. 打开项目
- 使用微信开发者工具打开项目目录:
/Users/win/code2025/wx-chant - 确保项目配置正确,appid 已设置
2. 测试场景
场景1:用户在底部时的自动滚动
- 进入聊天页面
- 滚动到最底部
- 等待新消息到达(轮询刷新)
- 预期结果:新消息自动滚动到视图中
场景2:用户在上方时保持位置
- 进入聊天页面
- 向上滚动查看历史消息
- 等待新消息到达(轮询刷新)
- 预期结果:
- 滚动位置保持不变
- 显示新消息提醒气泡
- 点击气泡可滚动到最新消息
场景3:用户发送消息时的自动滚动
- 在聊天页面发送文本或图片消息
- 预期结果:自动滚动到刚发送的消息
3. 调试信息
已添加控制台日志,可在微信开发者工具的控制台中查看:
- 滚动状态变化
- 自动滚动触发情况
- scrollToId 设置情况
4. 关键日志信息
用户在底部,准备自动滚动到消息ID: xxx- 触发自动滚动用户不在底部或无消息,保持当前位置- 保持位置用户向上滚动,设置isAtBottom为false- 状态变化用户滚动到底部,当前isAtBottom状态: xxx- 到达底部
技术实现
核心逻辑
// 智能滚动:先更新数据,再延迟设置滚动
that.setData(updateData);
if (that.data.isAtBottom && sortedList.length > 0) {
setTimeout(() => {
that.setData({
scrollToId: lastMessageId
});
}, 50);
}
状态管理
isAtBottom: 标记用户是否在聊天底部scrollToId: 控制滚动到指定消息- 延迟50ms确保DOM更新后再滚动