vueJs實(shí)現(xiàn)DOM加載完之后自動(dòng)下拉到底部的實(shí)例代碼
這篇文章給大家介紹vueJs實(shí)現(xiàn)DOM加載完成之后自動(dòng)下拉到底部,文中給大家記錄了整個(gè)問(wèn)題的過(guò)程,對(duì)實(shí)現(xiàn)思路感興趣的朋友大家閱讀下本文。
/.....................................更新..................................../
這個(gè)問(wèn)題是很早之前遇到的,后來(lái)想來(lái),其實(shí)是個(gè)很簡(jiǎn)單的問(wèn)題。在dom記載完成就自動(dòng)下拉到底部,只需要使用Vue.nextTick(() => {})
函數(shù)即可,因?yàn)関ue是虛擬dom,不會(huì)實(shí)時(shí)更新dom,nectTick()就是注冊(cè)在下一次更新dom之后的回調(diào)。
而再看我的問(wèn)題,其實(shí)之所以出現(xiàn)那樣的問(wèn)題,就是ajax的異步執(zhí)行的問(wèn)題而已。
/..................................................更新完..................../
工作項(xiàng)目是基于vueJs框架的,遇到一個(gè)需求:有一組件,在創(chuàng)建時(shí)會(huì)通過(guò)ajax向服務(wù)器請(qǐng)求一組數(shù)據(jù),以列表形式展示出來(lái),并且自動(dòng)下拉到底部。
實(shí)現(xiàn)思路:首先弄清楚vueJs組件的生命周期,如下圖。發(fā)完發(fā)現(xiàn)圖不見(jiàn)了...這里貌似不能放圖,就是vueJs生命周期和鉤子,讀者自行百度一下吧,到處都是。
具體細(xì)節(jié)不做介紹,自行看圖或者右轉(zhuǎn)官網(wǎng)查找http://cn.vuejs.org/
知道了生命周期,再對(duì)應(yīng)需求,很自然地關(guān)注三個(gè)時(shí)期beforeCreate,mounted,updated.
1. beforeCreate時(shí)期
此時(shí)期相當(dāng)于做一些初始化工作,此時(shí)做ajax最合適。代碼如下:
beforeRouteEnter(to, from, next) { next(function(vm) { if (vm.dataList.length == 0) { //此處實(shí)現(xiàn)ajax vm.getVersionInfo(); } }); }
代碼是之前寫(xiě)的,使用的beforeRouteEnter鉤子(vm:因?yàn)榇藭r(shí)該組件可能還未創(chuàng)建,所以不能用this,而用vm代替,vm所執(zhí)行代碼會(huì)在其創(chuàng)建之后執(zhí)行。),這個(gè)鉤子會(huì)在每次通過(guò)vue-route路由進(jìn)入組件頁(yè)面前調(diào)用,而需求是只有第一次進(jìn)入需要自動(dòng)執(zhí)行ajax,因此還做了判斷data是否長(zhǎng)度為0,而在寫(xiě)博的時(shí)候發(fā)現(xiàn),如果使用beforeCreate鉤子應(yīng)該就不會(huì)有這么多麻煩,不過(guò)也僅僅是猜測(cè),使用請(qǐng)自行驗(yàn)證。
2. mounted時(shí)期
此鉤子會(huì)在模板(html)編譯完成并掛載后調(diào)用,最開(kāi)始我想的是,在這里實(shí)現(xiàn)一個(gè)自動(dòng)滾動(dòng)到底部的操作,但是發(fā)現(xiàn)不行。為什么呢?因?yàn)閍jax是異步操作,在beforeCreate時(shí)期執(zhí)行了ajax,并不能保證在mounted時(shí),數(shù)據(jù)已經(jīng)傳回,所以此時(shí)做下拉操作沒(méi)有意義。
3 updated時(shí)期
此鉤子在組件對(duì)象data數(shù)據(jù)發(fā)生變化時(shí),而我在ajax的success回調(diào)函數(shù)里會(huì)改變data,所以此時(shí)調(diào)用應(yīng)該是很合適的。然而,實(shí)現(xiàn)之后又出現(xiàn)了問(wèn)題,每次自動(dòng)下拉滾動(dòng)到底部只能下拉滾動(dòng)到data原列表的最底部,而新添加的項(xiàng)還在下面。舉例來(lái)說(shuō)
4(ajax新獲?。?/strong>
每次updated處執(zhí)行ajax下拉操作自動(dòng)下拉滾動(dòng),只能會(huì)到4,而不是5的位置。究其原因,原來(lái)是因?yàn)閡pdated是執(zhí)行時(shí),打他只是data改變,而有可能document并沒(méi)有渲染完成,從而導(dǎo)致,不能處理新添加的項(xiàng),而偏偏vue并沒(méi)有提供渲染完成的鉤子。
在網(wǎng)上鎖了搜了很多資料,一些資料,比較靠譜的是設(shè)置一個(gè)延遲,setTimeout(),但是這樣頁(yè)面會(huì)有明顯的一個(gè)跳動(dòng)柑橘感覺(jué)閃動(dòng),影響用戶體驗(yàn),而我的處理是:
updated() { let count = 0; let interval = setInterval(() => { if (count > 3000) { clearInterval(interval); this.isFirst = false; } count++; if (document.body.scrollHeight != document.body.clientHeight) { document.body.scrollTop = document.body.scrollHeight; if (document.body.scrollTop == document.body.scrollHeight-document.body.clientHeight) { clearInterval(interval); this.isFirst = false; } } }, 0); }
這個(gè)原理應(yīng)該很簡(jiǎn)單,看代碼應(yīng)該能看明白。
總結(jié)
以上所述是小編給大家介紹的vueJs實(shí)現(xiàn)DOM加載完之后自動(dòng)下拉到底部的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn)
- vue.js整合vux中的上拉加載下拉刷新實(shí)例教程
- vue實(shí)現(xiàn)ajax滾動(dòng)下拉加載,同時(shí)具有l(wèi)oading效果(推薦)
- 解決Vue使用mint-ui loadmore實(shí)現(xiàn)上拉加載與下拉刷新出現(xiàn)一個(gè)頁(yè)面使用多個(gè)上拉加載后沖突問(wèn)題
- vue2.0 移動(dòng)端實(shí)現(xiàn)下拉刷新和上拉加載更多的示例
- vue移動(dòng)端下拉刷新和上拉加載的實(shí)現(xiàn)代碼
- vue mintui-Loadmore結(jié)合實(shí)現(xiàn)下拉刷新和上拉加載示例
- vue使用better-scroll實(shí)現(xiàn)下拉刷新、上拉加載
- vue插件mescroll.js實(shí)現(xiàn)移動(dòng)端上拉加載和下拉刷新
- vue實(shí)現(xiàn)下拉加載其實(shí)沒(méi)那么復(fù)雜
相關(guān)文章
vue+axios+element ui 實(shí)現(xiàn)全局loading加載示例
今天小編就為大家分享一篇vue+axios+element ui 實(shí)現(xiàn)全局loading加載示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue elementui異步給dom賦值無(wú)效問(wèn)題
這篇文章主要介紹了vue elementui異步給dom賦值無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Vue router動(dòng)態(tài)路由實(shí)現(xiàn)過(guò)程
Vue動(dòng)態(tài)路由(約定路由),聽(tīng)起來(lái)好像很玄乎的樣子,但是你要是理解了實(shí)現(xiàn)思路,你會(huì)發(fā)現(xiàn)沒(méi)有想象中的那么難,下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)動(dòng)態(tài)路由添加功能的簡(jiǎn)單方法,需要的朋友可以參考下2023-03-03vue中設(shè)置height:100%無(wú)效的問(wèn)題及解決方法
這篇文章主要介紹了vue中設(shè)置height 100%無(wú)效的問(wèn)題及解決方法,需要的朋友可以參考下2018-07-07Vue?監(jiān)視屬性之天氣案例實(shí)現(xiàn)
這篇文章主要介紹了Vue?監(jiān)視屬性之天氣案例實(shí)現(xiàn),文章以天氣為例展開(kāi)介紹Vue?監(jiān)視屬性?的相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-05-05vue 函數(shù)調(diào)用加括號(hào)與不加括號(hào)的區(qū)別
這篇文章主要介紹了vue 函數(shù)調(diào)用加括號(hào)與不加括號(hào)的區(qū)別,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下2020-10-10