色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

vue內獲取windows

錢衛國2年前9瀏覽0評論

無論是Web開發還是移動端開發,操作系統的窗口大小都有可能會影響我們的實現效果。在Vue中,如何獲取當前窗口的大小呢?

Vue通過引入第三方庫來獲取窗口的大小,其中比較常用的是使用window對象。通常可以在created或mounted的生命周期函數中獲取window的大小,其中mounted是Vue組件優先渲染到DOM節點后才會觸發的事件。具體實現代碼如下:

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解析完之后立即觸發,而mounted事件在DOM渲染完之后觸發。另外需要注意的是為了防止內存泄漏,需要在銷毀組件前手動移除resize事件監聽。

除了通過window對象,還有一種獲取窗口大小的方式而不需要使用第三方庫,那就是使用HTML5的新API——ResizeObserver。雖然這種方法目前還用的較少,但技術的發展很可能會逐漸被廣泛應用。代碼實現如下:

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屬性來獲取元素的大小。 ResizeObserver在每次測量完成之后會觸發回調函數entries,然后我們就可以獲取contentRect屬性了。

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

最后需要提醒一下,無論是使用window對象還是使用ResizeObserver,獲取到的僅僅是窗口大小,而非頁面大小。頁面大小也就是可見區域大小,通常可以通過document.body.clientWidth等屬性獲取。