Vue實(shí)現(xiàn)渲染數(shù)據(jù)后控制滾動(dòng)條位置(推薦)
需求場(chǎng)景如下:
實(shí)現(xiàn)了消息發(fā)送,如果容器內(nèi)消息過(guò)多,會(huì)出現(xiàn)滾動(dòng)條,最新的消息位于最底部,不能及時(shí)出現(xiàn)在可視區(qū)域內(nèi),此時(shí)就需要在渲染列表后,將滾動(dòng)條的位置定位到最底部。先來(lái)看看最終實(shí)現(xiàn)的效果
實(shí)現(xiàn)思路
- 渲染完數(shù)據(jù)后,通過(guò)refs對(duì)象獲取消息容器的實(shí)際高度
- 將滾動(dòng)條的設(shè)置到最底部
實(shí)現(xiàn)過(guò)程
sendMessage: function (event) { // 數(shù)據(jù)渲染 this.senderMessageList.push(thisSenderMessageObj); // 改變滾動(dòng)條位置 this.messagesContainerTimer = setTimeout(()=>{ this.$refs.messagesContainer.scrollTop = this.$refs.messagesContainer.scrollHeight; console.log("當(dāng)前滾動(dòng)條位置:"+this.$refs.messagesContainer.scrollTop); console.log("當(dāng)前可滾動(dòng)區(qū)域容器的高度:"+this.$refs.messagesContainer.scrollHeight); // 清理定時(shí)器 clearTimeout(this.messagesContainerTimer); },0); }
踩坑記錄
直接設(shè)置滾動(dòng)條的位置
數(shù)據(jù)渲染完成后直接獲取元素的真實(shí)高度,設(shè)置滾動(dòng)條的位置,講道理好像沒(méi)什么毛病,結(jié)果滾動(dòng)條的高度沒(méi)有預(yù)想的渲染。問(wèn)題原因:數(shù)據(jù)渲染完成后,Vue此時(shí)還沒(méi)有渲染DOM元素,設(shè)置的滾動(dòng)條高度還是之前的容器高度。
sendMessage: function (event) { // 數(shù)據(jù)渲染 this.senderMessageList.push(thisSenderMessageObj); // 改變滾動(dòng)條位置 this.$refs.messagesContainer.scrollTop = this.$refs.messagesContainer.scrollHeight; console.log("當(dāng)前滾動(dòng)條位置:"+this.$refs.messagesContainer.scrollTop); console.log("當(dāng)前可滾動(dòng)區(qū)域容器的高度:"+this.$refs.messagesContainer.scrollHeight); }
正確的改變方式: 使用setTimeout(),將DOM操作改為異步。
this.messagesContainerTimer = setTimeout(()=>{ this.$refs.messagesContainer.scrollTop = this.$refs.messagesContainer.scrollHeight; console.log("當(dāng)前滾動(dòng)條位置:"+this.$refs.messagesContainer.scrollTop); console.log("當(dāng)前可滾動(dòng)區(qū)域容器的高度:"+this.$refs.messagesContainer.scrollHeight); // 清理定時(shí)器 clearTimeout(this.messagesContainerTimer); },0);
總結(jié)
以上所述是小編給大家介紹的Vue實(shí)現(xiàn)渲染數(shù)據(jù)后控制滾動(dòng)條位置,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
vue實(shí)現(xiàn)點(diǎn)擊出現(xiàn)操作彈出框的示例
這篇文章主要介紹了vue實(shí)現(xiàn)點(diǎn)擊出現(xiàn)操作彈出框的示例,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下2020-11-11基于Vue2實(shí)現(xiàn)動(dòng)態(tài)折扣表格
這篇文章主要為大家詳細(xì)介紹了如何基于Vue2實(shí)現(xiàn)動(dòng)態(tài)折扣表格,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01Vue nextTick延遲回調(diào)獲取更新后DOM機(jī)制詳解
這篇文章主要為大家介紹了Vue nextTick延遲回調(diào)獲取更新后DOM機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08vue如何設(shè)置輸入框只能輸入數(shù)字且只能輸入小數(shù)點(diǎn)后兩位,并且不能輸入減號(hào)
這篇文章主要介紹了vue如何設(shè)置輸入框只能輸入數(shù)字且只能輸入小數(shù)點(diǎn)后兩位,并且不能輸入減號(hào)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05vue實(shí)現(xiàn)目錄樹(shù)結(jié)構(gòu)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)目錄樹(shù)結(jié)構(gòu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Vue包大小優(yōu)化的實(shí)現(xiàn)(從1.72M到94K)
這篇文章主要介紹了Vue包大小優(yōu)化的實(shí)現(xiàn)(從1.72M到94K),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Vue 中頁(yè)面?zhèn)髦档亩喾N方式小結(jié)
本文主要介紹了Vue 中頁(yè)面?zhèn)髦档亩喾N方式小結(jié),主要包括路由傳參、Vuex 狀態(tài)管理、Props 屬性和事件傳遞數(shù)據(jù)這幾種,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10