❤ 兼容篇

文章讲述了在Vue应用中如何通过监听window.resize事件实现页面根据设备尺寸自动跳转,同时解决因频繁resize导致的CPU占用问题。介绍了Vue2和Vue3中的不同解决方案,并提及了检测设备类型的方法。
摘要由CSDN通过智能技术生成

❤ 兼容篇

实现的需求是根据页面尺寸进行跳转
当app或者h5 的时候,跳转app/home页面
当pc端的时候,自动跳转导/初始页面

windows.resize监听兼容设备尺寸大小

 window.addEventListener('resize', () => {
      let w = window.innerWidth;
      let h = window.innerHeight;
      if (w < 1380) {
        this.showbigscreenapp = true;
        // console.log('app');
        // _this.$nextTick(()=>{  })
      } else {
        this.showbigscreenapp = false;
        // console.log('pc');
      };
      // console.log('页面大小发生了变化,屏幕宽高', `宽度:${w}`, `高度:${h}`);
    });

windows.resize监听事件导致浏览器cpu占用高

在实现一个监控系统的dashboard页面,页面上有很多的echarts图表,当浏览器窗口大小变化时,页面的所有数据要重新计算宽高值,于是使用了window.addEventListener(“resize”) 来解决这个问题。

结果在使用中,当浏览器窗口多次改变大小之后,页面卡顿的很厉害,查看浏览器的cpu占用率也很高,迟迟降不下来。

排查了windows.resize的正确使用方法,才知道,这个事件是需要手动销毁的。

vue2解决方法~

销毁windows.resize事件,需要实名函数,所以在添加windows.resize事件时也要使用实名函数,添加和销毁的参数要一样一样的:

//挂载
mounted() {
    window.addEventListener("resize", this.resizeHandler, false);
}

//销毁
beforeDestroy() {
    window.removeEventListener("resize", this.resizeHandler, false);
}

————————————————

vue3解决方法~

import { ref ,onMounted, onBeforeUnmount} from 'vue';
const showAndroid = ref(false);

// 挂载时添加resize事件监听
onMounted(() => {
  console.log('挂载');
  window.addEventListener("resize", resizeHandler, true);
});

// 销毁前移除resize事件监听
onBeforeUnmount(() => {
  console.log('销毁');
  window.removeEventListener("resize", resizeHandler, false);
});
const resizeHandler = () => {
      let w = window.innerWidth;
      let h = window.innerHeight;
      if (w < 1380) {
         console.log('resize-app');
         showAndroid.value= true;
      } else {
        console.log('resize-pc');
        showAndroid.value = false;
      };
     // console.log('页面大小发生了变化,屏幕宽高', `宽度:${w}`, `高度:${h}`);
};

检测当前设备是手机端还是PC端或者H5端

 // 检测设备
const isAndroid = () => {
    // 处理resize事件的逻辑
     if (/Mobi|Android|iPhone/i.test(navigator.userAgent)) {
       console.log("1-app移动设备");
        // router.push('/app/home');
        showAndroid.value = true;
    } else if (/(micromessenger)/i.test(navigator.userAgent)) {
        console.log("微信浏览器");
        console.log("2");
        showAndroid.value = true;
        // router.push('/app/home');
    } else {
        console.log("3");
        // console.log("普通浏览器");
        // 判断h5还是pc true就是h5
        let client =
            /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
                navigator.userAgent
            );
        if (client) {
            console.log("3-1");
            console.log("普通浏览器-h5");
            showAndroid.value = true;
            // router.push('/app/home');
        } else {
            console.log("3-2");
            // console.log("普通浏览器-pc");
            showAndroid.value = false;
            // router.push('/');
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林太白

感谢打赏,你拥有了我VIP权限

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值