色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

VUE實時監聽元素距離頂部高度的操作

瀏覽:81日期:2022-12-23 15:46:10

效果圖如下所示

VUE實時監聽元素距離頂部高度的操作

.html

<!-- 監聽ref距離頂部高度 --><div ref='pronbit'> <div>今日熱門</div> <div>今日熱銷</div></div>

.js

mounted(){ window.addEventListener(’scroll’,this.handleScrollx,true)},methods: { handleScrollx() { console.log(’滾動高度’,window.pageYOffset) console.log(’距離頂部高度’,this.$refs.pronbit.getBoundingClientRect().top) },}

補充知識:Vue異步更新隊列 及 $nextTick的使用

問題一:什么是$nextTick?

簡單回答:

因為Vue的異步更新隊列,$nextTick是用來知道什么時候DOM更新完成的。

詳細解讀:

我們先來看這樣一個場景:有一個div,默認用 v-if 將它隱藏,點擊一個按鈕后,改變 v-if 的值,讓它顯示出來,同時拿到這個div的文本內容。如果v-if的值是 false,直接去獲取div內容是獲取不到的,因為此時div還沒有被創建出來,那么應該在點擊按鈕后,改變v-if的值為 true,div才會被創建,此時再去獲取,示例代碼如下:

<div id='app'> <div v-if='showDiv'>這是一段文本</div> <button @click='getText'>獲取div內容</button> </div> <script> var app = new Vue({ el : '#app', data:{ showDiv : false }, methods:{ getText:function(){this.showDiv = true;var text = document.getElementById(’div’).innnerHTML; console.log(text); } } }) </script>

這段代碼并不難理解,但是運行后在控制臺會拋出一個錯誤:Cannot read property ’innnerHTML of null,意思就是獲取不到div元素。這里就涉及Vue一個重要的概念:異步更新隊列。

異步更新隊列

Vue在觀察到數據變化時并不是直接更新DOM,而是開啟一個隊列,并緩沖在同一個事件循環中發生的所有數據改變。在緩沖時會去除重復數據,從而避免不必要的計算和DOM操作。然后,在下一個事件循環tick中,Vue刷新隊列并執行實際(已去重的)工作。所以如果你用一個for循環來動態改變數據100次,其實它只會應用最后一次改變,如果沒有這種機制,DOM就要重繪100次,這固然是一個很大的開銷。

Vue會根據當前瀏覽器環境優先使用原生的Promise.then和MutationObserver,如果都不支持,就會采用setTimeout代替。

知道了Vue異步更新DOM的原理,上面示例的報錯也就不難理解了。事實上,在執行this.showDiv = true時,div仍然還是沒有被創建出來,直到下一個vue事件循環時,才開始創建。$nextTick就是用來知道什么時候DOM更新完成的,所以上面的示例代碼需要修改為:

<div id='app'> <div v-if='showDiv'>這是一段文本</div> <button @click='getText'>獲取div內容</button> </div> <script> var app = new Vue({ el : '#app', data:{ showDiv : false }, methods:{ getText:function(){this.showDiv = true;this.$nextTick(function(){ var text = document.getElementById(’div’).innnerHTML; console.log(text); }); } } }) </script>

這時再點擊事件,控制臺就打印出div的內容“這是一段文本“了。

理論上,我們應該不用去主動操作DOM,因為Vue的核心思想就是數據驅動DOM,但在很多業務里,我們避免不了會使用一些第三方庫,比如 popper.js、swiper等,這些基于原生javascript的庫都有創建和更新及銷毀的完整生命周期,與Vue配合使用時,就要利用好$nextTick。

以上這篇VUE實時監聽元素距離頂部高度的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
主站蜘蛛池模板: 怡红院亚洲怡红院首页 | 中文字幕或区 | 国产成人免费永久播放视频平台 | 超薄肉色丝袜精品足j福利 超级乱淫视频aⅴ播放视频 | 国产在线精品福利91香蕉 | 国产免费怡红院视频 | 亚洲国产精品久久久天堂 | 乱子伦一级在线现看 | 亚洲清纯自偷自拍另类专区 | 亚洲好逼| 黄色成人毛片 | 欧美色老头gay | 亚洲精品中文字幕一区在线 | 窝窝午夜精品一区二区 | 国产一精品一aⅴ一免费 | 欧美xxx国产xxx| 国产深夜福利视频观看 | 久久夜色精品国产亚洲 | 久久久久香蕉视频 | 九九久久免费视频 | 王朝影院一区二区三区入口 | 久草在线新视频 | 女人张开双腿让男人桶完整 | 搞黄网站在线观看 | 国产永久精品 | 夜夜春夜夜夜夜猛噜噜噜噜噜 | 久久亚洲国产欧洲精品一 | 久久99精品久久久久久久野外 | 中文字幕在线不卡 | 免费看一级欧美激情毛片 | 国产成人精品免费视频大全可播放的 | 亚洲精品亚洲人成毛片不卡 | 免费观看一级欧美大 | 日本一区二区三区不卡在线视频 | 香港国产特级一级毛片 | 成人做爰视频www视频 | 草草视频在线观看 | 在线视频免费观看a毛片 | 精品国产一区二区三区不卡 | 一级毛片成人免费看a | 殴美毛片 |