一个程序问题
程序目的,聊天程序首次打开的时候后台请求数据填充到qList中,获取内容的高度向下滚动到最低处
}).then(res => {
this.qList = res.data.data.reverse();
/**
* 获取内容的高度,当发送新消息时自动滚动到最底部
* 当内容增加时,重新计算总view的高度
*/
(() => {
let header = uni.createSelectorQuery().select(".scroll");
header
.fields(
{
size: true,
scrollOffset: false
},
data => {
this.pageHeight = data.height;
console.log(this.pageHeight, "-----pageHeight------");
uni.pageScrollTo({
scrollTop: this.pageHeight,
duration: 300
});
}
)
.exec();
})();
但是程序最后只滚动了267px,并没有把内容填充后的高度计算进去
把这个程序放到一个setTimeout中发现可以了
}).then(res => {
this.qList = res.data.data.reverse();
/**
* 获取内容的高度,当发送新消息时自动滚动到最底部
* 当内容增加时,重新计算总view的高度
* 放setTimeout宏任务队列等待视图渲染完获取高度
*/
setTimeout(() => {
let header = uni.createSelectorQuery().select(".scroll");
header
.fields(
{
size: true,
scrollOffset: false
},
data => {
this.pageHeight = data.height;
console.log(this.pageHeight, "-----pageHeight------");
uni.pageScrollTo({
scrollTop: this.pageHeight,
duration: 300
});
}
)
.exec();
}, 0);
});
计算进去了追加内容后的高度