在vue2中使用全局监听浏览器窗口变化,适配手机端判断

1新建文件windowSizeMixin.js

有三个属性可以使用windowWidth(窗口宽度),windowHeight(窗口高度),MobileVerification(是否是在手机端)当然还可以加其他的内容
问题:

  1. 如果设置了固定的宽度,比如给页面元素的宽度设置了定好的1200px后,会导致在f12界面改为手机端的时候innerWidth获取的宽度还是1200px,而不是手机端的宽度(未解决,我现在是强行不用固定宽度了,也可以用媒体查询来控制宽度)
  2. 不知道会不会导致重复调用
  3. 必须在页面的监听或者watch循环中调用
//混入,实时获取宽高并把判断是否是手机端,需要在调用的地方+watch
// src/mixins/windowSizeMixin.js
//混入,实时获取宽高并把判断是否是手机端,需要在调用的地方+watch
export default {
	data() {
		return {
			windowWidth: window.innerWidth, //视窗宽度
			windowHeight: window.innerHeight, //视窗高度
			MobileVerification: window.matchMedia('(max-width: 768px)').matches, //是否是手机端
			eduServerAddress: window.$eduServerAddress, //挂载全局链接
			indexServerAddress: window.$indexServerAddress, //挂载全局链接
		};
	},
	mounted() {
		window.addEventListener('resize', this.handleResize);
	},
	beforeDestroy() {
		window.removeEventListener('resize', this.handleResize);
	},
	methods: {
		handleResize() {
			//媒体查询写法
			const isMobile = window.matchMedia('(max-width: 768px)').matches;
			this.MobileVerification = isMobile;
			//bom写法
			// this.MobileVerification =
			// 	window.innerWidth <= 769 ||
			// 	/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
			// 		navigator.userAgent
			// 	);
			this.windowWidth = window.innerWidth;
			this.windowHeight = window.innerHeight;
		},
	},
};

2在main.js文件引入

import windowSizeMixin from '@/mixins/windowSizeMixin';//混入-浏览器窗口监听

Vue.mixin(windowSizeMixin);

3在具体代码调用

watch: {
		MobileVerification: {
			handler(to) {
			//处理函数
				this.isMobileVt();
			},
			immediate: true,
		},
	},
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Ant Design Vue,您可以使用`Vue`提供的官方方式来监听浏览器窗口变化而不重新加载页面。下面是一个简单的示例: 首先,在您的组件导入`Vue`和`ant-design-vue`: ```javascript import Vue from 'vue'; import { debounce } from 'ant-design-vue'; ``` 然后,您可以使用`Vue`提供的生命周期函数`mounted`来监听窗口大小的变化: ```javascript mounted() { this.$nextTick(() => { window.addEventListener('resize', this.handleResize); }); }, ``` 在这个例子,我在组件的`mounted`生命周期函数注册了一个`resize`事件的监听器,并将其与一个叫做`handleResize`的方法绑定。 接下来,您需要在组件定义`handleResize`方法来处理窗口大小的变化: ```javascript methods: { handleResize: debounce(function() { // 处理窗口大小变化的逻辑 }, 300), }, ``` 在这个例子,我使用了`debounce`函数,它可以将频繁触发的事件缩减为一定时间内只触发一次。这样可以避免事件过于频繁地触发,提高性能。 最后,不要忘记在组件销毁时移除窗口大小变化监听: ```javascript beforeDestroy() { window.removeEventListener('resize', this.handleResize); }, ``` 通过添加类似上述代码,在Ant Design Vue您就可以监听浏览器窗口变化而不重新加载页面了。当窗口大小变化时,`handleResize`方法会被调用,您可以在其添加适当的逻辑来应对窗口大小变化所带来的变化
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值