vue中window.onresize的使用解析
window.onresize的使用
說下重點(diǎn)
window.onresize只能在一個(gè)組件中使用,如果多個(gè)組件調(diào)用則會(huì)出現(xiàn)覆蓋情況,所以我的解決方案是在App.vue中使用,獲取document.documentElement.clientWidth(即瀏覽器寬度)存放在vuex中,別的組件只需要用computed(計(jì)算屬性)將vuex的clientWidth獲取,然后通過watch監(jiān)聽clientWidth的值,即可觸發(fā)組件事件
App.vue代碼
<script>
export default {
? name: 'app',
? mounted () {
? ? window.onresize = () => {
? ? ? this.clientWidthResize()
? ? }
? },
? methods: {
? ? clientWidthResize () {
? ? ? this.$store.commit('Tool/resizeWidth', Number(document.documentElement.clientWidth))
? ? }
? }
}
</script>store中tool.js代碼(此處進(jìn)行模塊化開發(fā))
export default {
? namespaced: true,
? state: {
? ? clientWidth: 0
? },
? getters: {},
? mutations: {
? ? resizeWidth(state, clientWidth) {
? ? ? state.clientWidth = clientWidth;
? ? },
? },
? actions: {},
}組件使用
computed: {
? clientWidth () {
? ? return this.$store.state.Tool.clientWidth || Number(document.documentElement.clientWidth)
? }
},
watch: {
? clientWidth (val) {
? ? console.log(val)
? }
},window.onresize筆記
1.瀏覽器尺寸變化響應(yīng)事件
?window.onresize = function(){....}這里需要注意的是,onresize響應(yīng)事件處理中,獲取到的頁面尺寸參數(shù)是變更后的參數(shù)。
// 獲取到的是變更后的頁面寬度 var currentWidth = document.body.clientWidth;?
如果需要使用到變更之前的參數(shù),需要建一個(gè)全局變量保存之前的參數(shù)(并且記得在onresize事件中刷新這個(gè)全局變量保存新的參數(shù)值)。
2.谷歌瀏覽器中
window.onresize事件默認(rèn)會(huì)執(zhí)行兩次(偶爾也會(huì)只執(zhí)行一次,網(wǎng)上大部分說法認(rèn)為這是Chrome的bug)。
解決方法:
一般來說推薦新建一個(gè)標(biāo)志位 延時(shí)復(fù)位控制它不讓它自己執(zhí)行第二次,代碼如下:
var firstOnResizeFire = true;//谷歌瀏覽器onresize事件會(huì)執(zhí)行2次,這里加個(gè)標(biāo)志位控制
?
window.onresize = function()
{
?if (firstOnResizeFire) {
? NfLayout.tabScrollerMenuAdjust(homePageWidth);
? firstOnResizeFire = false;
??
? //0.5秒之后將標(biāo)志位重置(Chrome的window.onresize默認(rèn)執(zhí)行兩次)
? setTimeout(function() {
? ?firstOnResizeFire = true;
? ? ? ? }, 500);
?}?
?homePageWidth = document.body.clientWidth; //重新保存一下新寬度
}3.頁面尺寸變更事件
注意要分為尺寸增大和尺寸變小兩個(gè)方向考慮。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue基礎(chǔ)ESLint?Prettier配置教程詳解
這篇文章主要介紹了vue基礎(chǔ)ESLint?Prettier配置教程詳解,本文使用VsCode?+?Vue?+?ESLint?+?Prettier?實(shí)現(xiàn)代碼格式規(guī)范?+?保存自動(dòng)修復(fù)代碼js+vue2022-07-07
vue+uniapp瀑布流布局多種實(shí)現(xiàn)方式示例代碼
由于使用uniapp開發(fā)的微信小程序不需要考慮響應(yīng)式,因此瀑布流的實(shí)現(xiàn)相對(duì)于pc端更為簡單,下面這篇文章主要給大家介紹了關(guān)于vue+uniapp瀑布流布局多種實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下2023-03-03
vue-cli3.x配置全局的scss的時(shí)候報(bào)錯(cuò)問題及解決
這篇文章主要介紹了vue-cli3.x配置全局的scss的時(shí)候報(bào)錯(cuò)問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue動(dòng)態(tài)設(shè)置頁面title的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于vue動(dòng)態(tài)設(shè)置頁面title的相關(guān)資料,文中通過實(shí)例代碼結(jié)束的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
詳解Vue一個(gè)案例引發(fā)「內(nèi)容分發(fā)slot」的最全總結(jié)
這篇文章主要介紹了詳解Vue一個(gè)案例引發(fā)「內(nèi)容分發(fā)slot」的最全總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
拖拽插件sortable.js實(shí)現(xiàn)el-table表格拖拽效果
本文主要介紹了拖拽插件sortable.js實(shí)現(xiàn)el-table表格拖拽效果,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

