vue中window.onresize的使用解析

 更新时间:2022年04月19日 09:28:04   作者:清虚桂意  
这篇文章主要介绍了vue中window.onresize的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

window.onresize的使用

说下重点

window.onresize只能在一个组件中使用,如果多个组件调用则会出现覆盖情况,所以我的解决方案是在App.vue中使用,获取document.documentElement.clientWidth(即浏览器宽度)存放在vuex中,别的组件只需要用computed(计算属性)将vuex的clientWidth获取,然后通过watch监听clientWidth的值,即可触发组件事件

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代码(此处进行模块化开发)

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.浏览器尺寸变化响应事件

 window.onresize = function(){....}

这里需要注意的是,onresize响应事件处理中,获取到的页面尺寸参数是变更后的参数。

// 获取到的是变更后的页面宽度
var currentWidth = document.body.clientWidth; 

如果需要使用到变更之前的参数,需要建一个全局变量保存之前的参数(并且记得在onresize事件中刷新这个全局变量保存新的参数值)。

2.谷歌浏览器中

window.onresize事件默认会执行两次(偶尔也会只执行一次,网上大部分说法认为这是Chrome的bug)。

解决方法:

一般来说推荐新建一个标志位 延时复位控制它不让它自己执行第二次,代码如下:

var firstOnResizeFire = true;//谷歌浏览器onresize事件会执行2次,这里加个标志位控制
 
window.onresize = function()
{
 if (firstOnResizeFire) {
  NfLayout.tabScrollerMenuAdjust(homePageWidth);
  firstOnResizeFire = false;
  
  //0.5秒之后将标志位重置(Chrome的window.onresize默认执行两次)
  setTimeout(function() {
   firstOnResizeFire = true;
        }, 500);
 } 
 homePageWidth = document.body.clientWidth; //重新保存一下新宽度
}

3.页面尺寸变更事件

注意要分为尺寸增大和尺寸变小两个方向考虑。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决vue内存溢出报错的问题

    解决vue内存溢出报错的问题

    这篇文章主要介绍了解决vue内存溢出报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 如何解决vue2.0下IE浏览器白屏问题

    如何解决vue2.0下IE浏览器白屏问题

    这篇文章主要介绍了如何解决vue2.0下IE浏览器白屏问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 对vue生命周期的深入理解

    对vue生命周期的深入理解

    这篇文章主要给大家介绍了关于对vue生命周期的深入理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • JavaScript之Vue.js【入门基础】

    JavaScript之Vue.js【入门基础】

    本文主要介绍一下Vue.js并附上在Node.js环境下搭建一个简单的Demo实例代码。条理清晰,有助于阅读和理解。有需要的朋友可以看下
    2016-12-12
  • vue3 拖拽hooks(可兼容移动端)和自定义指令拖拽的实现代码

    vue3 拖拽hooks(可兼容移动端)和自定义指令拖拽的实现代码

    这篇文章主要介绍了vue3 拖拽hooks(可兼容移动端)和自定义指令拖拽的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • Vue图片裁剪组件实例代码

    Vue图片裁剪组件实例代码

    这篇文章主要给大家介绍了关于Vue图片裁剪组件的相关资料,本文介绍的组件是基于vue-cropper二次封装,vue-cropper大家应该都很熟悉了吧,需要的朋友可以参考下
    2021-07-07
  • Vue computed计算属性总结记录

    Vue computed计算属性总结记录

    在vue中,有时候你需要对data中的数据进行处理,或者对抓取的数据进行处理之后再挂载呈现到标签中,这时候你就需要计算属性了,当然看到这里你可能还是不了解那下面我举几个实例并附代码解释
    2023-02-02
  • vue中的get方法\post方法如何实现传递数组参数

    vue中的get方法\post方法如何实现传递数组参数

    这篇文章主要介绍了vue中的get方法\post方法如何实现传递数组参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vuex状态持久化在vue和nuxt.js中的区别说明

    vuex状态持久化在vue和nuxt.js中的区别说明

    这篇文章主要介绍了vuex状态持久化在vue和nuxt.js中的区别说明,具有很好的参考价值,希望大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue3实现父组件提交校验多个子组件

    vue3实现父组件提交校验多个子组件

    这篇文章主要为大家详细介绍了vue3如何实现父组件在提交事件中校验多个子组件中的form件,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2023-11-11

最新评论