欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

vue內(nèi)獲取windows

無(wú)論是Web開(kāi)發(fā)還是移動(dòng)端開(kāi)發(fā),操作系統(tǒng)的窗口大小都有可能會(huì)影響我們的實(shí)現(xiàn)效果。在Vue中,如何獲取當(dāng)前窗口的大小呢?

Vue通過(guò)引入第三方庫(kù)來(lái)獲取窗口的大小,其中比較常用的是使用window對(duì)象。通常可以在created或mounted的生命周期函數(shù)中獲取window的大小,其中mounted是Vue組件優(yōu)先渲染到DOM節(jié)點(diǎn)后才會(huì)觸發(fā)的事件。具體實(shí)現(xiàn)代碼如下:

created () {
this.getWindowSize()
},
mounted () {
this.getWindowSize()
window.addEventListener('resize', this.getWindowSize, false)
},
destroyed () {
window.removeEventListener('resize', this.getWindowSize, false)
},
methods: {
getWindowSize () {
this.windowHeight = window.innerHeight
this.windowWidth = window.innerWidth
}
}

上述代碼中,created事件在Vue組件不同于mounted事件,created事件在template解析完之后立即觸發(fā),而mounted事件在DOM渲染完之后觸發(fā)。另外需要注意的是為了防止內(nèi)存泄漏,需要在銷(xiāo)毀組件前手動(dòng)移除resize事件監(jiān)聽(tīng)。

除了通過(guò)window對(duì)象,還有一種獲取窗口大小的方式而不需要使用第三方庫(kù),那就是使用HTML5的新API——ResizeObserver。雖然這種方法目前還用的較少,但技術(shù)的發(fā)展很可能會(huì)逐漸被廣泛應(yīng)用。代碼實(shí)現(xiàn)如下:

created () {
this.registerResizeObserver()
},
destroyed () {
this.unregisterResizeObserver()
},
methods: {
registerResizeObserver () {
this.resizeObserver = new ResizeObserver(entries =>{
const { width, height } = entries[0].contentRect
this.$nextTick(() =>{
this.windowWidth = width
this.windowHeight = height
})
})
this.resizeObserver.observe(document.body)
},
unregisterResizeObserver () {
this.resizeObserver.unobserve(document.body)
}
}

上述代碼中我們使用了comstentRect屬性來(lái)獲取元素的大小。 ResizeObserver在每次測(cè)量完成之后會(huì)觸發(fā)回調(diào)函數(shù)entries,然后我們就可以獲取contentRect屬性了。

需要注意的是,ResizeObserver不支持IE,所以只適用于現(xiàn)代化瀏覽器。

最后需要提醒一下,無(wú)論是使用window對(duì)象還是使用ResizeObserver,獲取到的僅僅是窗口大小,而非頁(yè)面大小。頁(yè)面大小也就是可見(jiàn)區(qū)域大小,通常可以通過(guò)document.body.clientWidth等屬性獲取。