位置: IT常识 - 正文

window.onresize的详细使用($(window).resize)

编辑:rootadmin
window.onresize的详细使用

推荐整理分享window.onresize的详细使用($(window).resize),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:windows resize,window resized,window.onresize 怎么用,$(window).resize,windows.onresize,$(window).resize,window. onresize,window. onresize,内容如对您有帮助,希望把文章链接给更多的朋友!

最近做的项目老是涉及到大小屏切换,但是因为屏幕宽高不一样的原因,老是要计算表格高度

window.onresize:监听window窗口变化,当窗口大小发生变化时,会触发此事件

含义

MDN中的定义是这样子的:

文档视图调整大小时会触发 resize事件。

在js中使用window.onresize = function(){// todo event}在html中使用<body onresize="myFunction()">在vue中的使用

需要注意的是,this在函数中指的是window,而不是vue实例

mounted(){const _this = thiswindow.onresize = function(){_this.width = document.body.clientWidth// todo event}}需要注意的两点:

1、this在函数中不可用,他在函数中不一定指全局上下文

解决办法如下:

const _this = thiswindow.onresize = function(){_this.width = document.body.clientWidth}

2、在谷歌浏览器中,window.onresize会触发两次,网上说是谷歌浏览器的bug

解决办法如下,设定一个标识

let flag = true window.onresize = function () { if (flag) { console.log(new Date(), '窗口改变了') flag = false } let timeId = setTimeout(() => { flag = true timeId = null // 清除延时定时器 }, 1000) }

没使用flag之前

window.onresize的详细使用($(window).resize)

使用之后,如下图,控制台只打印了一遍

注意在项目中的使用

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

2、由于window.onresize是全局事件,在其他页面改变界面时也会执行,这样可能会出现问题,需要在出这个界面时注销window.onresize事件。

created() { this.$bus.$on('resize', this.$_setTableHeight) window.onresize = function () { console.log(new Date(), '窗口改变了') }},beforeDestroy() { this.$bus.$off('resize', this.$_setTableHeight) window.onresize = null},

注销之后,切换到其他页面,控制台就不会输出以下信息

window.addEventListenermounted() { this.$nextTick(() => { this.onDrawLine() window.addEventListener('resize', this.resize()) }) }, beforeDestroy() { console.log('删除了')// 具名函数使用removeEventListener清除,但是匿名函数不行 window.removeEventListener('resize', this.resize()) },性能优化

window.onresize 在监听窗口变化时,固然起到很好的效果,但是对于网页性能消耗过大。因为html中每个标签的变化,都会触发window.onresize 事件,比如显示/隐藏某个抽屉、添加/删除某个div等等,很有可能会造成循环触发和无限制触发,于是新推出了另外一个事件**ResizeObserver(对element和svgelement元素进行监听)**

MDN定义如下:

ResizeObserver避免了通过回调函数调整大小时,通常创建的无限回调循环和循环依赖项。它只能通过在后续的帧中处理 DOM 中更深层次的元素来做到这一点。如果它的实现遵循规范,则应在绘制前和布局后调用 resize 事件。

MDN示例:https://mdn.github.io/dom-examples/resize-observer/resize-observer-text.html

部分源码如下:

const h1Elem = document.querySelector('h1');const pElem = document.querySelector('p');const divElem = document.querySelector('body > div');const slider = document.querySelector('input[type="range"]');const checkbox = document.querySelector('input[type="checkbox"]');divElem.style.width = '600px';slider.addEventListener('input', () => { divElem.style.width = `${slider.value}px`;})const resizeObserver = new ResizeObserver((entries) => { for (const entry of entries) { if (entry.contentBoxSize) { // Firefox implements `contentBoxSize` as a single content rect, rather than an array const contentBoxSize = Array.isArray(entry.contentBoxSize) ? entry.contentBoxSize[0] : entry.contentBoxSize; h1Elem.style.fontSize = `${Math.max(1.5, contentBoxSize.inlineSize / 200)}rem`; pElem.style.fontSize = `${Math.max(1, contentBoxSize.inlineSize / 600)}rem`; } else { h1Elem.style.fontSize = `${Math.max(1.5, entry.contentRect.width / 200)}rem`; pElem.style.fontSize = `${Math.max(1, entry.contentRect.width / 600)}rem`; } } console.log('Size changed');});resizeObserver.observe(divElem);checkbox.addEventListener('change', () => { if (checkbox.checked) { resizeObserver.observe(divElem); } else { resizeObserver.unobserve(divElem); }});

副作用:兼容性不强,有些浏览器兼容,具体情况见Can I Use

参考链接:

https://www.cnblogs.com/yxysuanfa/p/6878016.html

https://www.jb51.net/article/245030.htm

https://developer.mozilla.org/zh-CN/docs/Web/API/ResizeObserver

本文链接地址:https://www.jiuchutong.com/zhishi/283956.html 转载请保留说明!

上一篇:【香港回归22周年】 (© ViewStock/Getty Images)(2020香港回归23年)

下一篇:小米路由器2代1T版本 PC端使用远程下载的详细方法(小米路由器2代改8t)

  • 几条网店推广比较有效的途径(网店的推广)

    几条网店推广比较有效的途径(网店的推广)

  • iQOO手机怎样进入补电模式(iqoo手机怎样进行电池校准)

    iQOO手机怎样进入补电模式(iqoo手机怎样进行电池校准)

  • 小米cc9信号不好怎么解决(小米cc9e手机信号差怎么解决)

    小米cc9信号不好怎么解决(小米cc9e手机信号差怎么解决)

  • 手机有声音找不到来源(手机有声音找不到来源,重启也没用)

    手机有声音找不到来源(手机有声音找不到来源,重启也没用)

  • 苹果11信号格怎么换图标(苹果信号格怎么换图标)

    苹果11信号格怎么换图标(苹果信号格怎么换图标)

  • 小米手机防水吗(苹果14手机防水吗)

    小米手机防水吗(苹果14手机防水吗)

  • 华为手机短信发送失败怎么回事(华为手机短信发送按钮灰色)

    华为手机短信发送失败怎么回事(华为手机短信发送按钮灰色)

  • 钉钉健康打卡有定位吗(钉钉健康打卡有什么意义)

    钉钉健康打卡有定位吗(钉钉健康打卡有什么意义)

  • 标压处理器什么意思(标压处理器什么意思i7)

    标压处理器什么意思(标压处理器什么意思i7)

  • 电脑版腾讯会议怎么换头像(电脑版腾讯会议怎么共享屏幕)

    电脑版腾讯会议怎么换头像(电脑版腾讯会议怎么共享屏幕)

  • 一个宽带可以装几个路由器(一个宽带可以装3个路由器吗)

    一个宽带可以装几个路由器(一个宽带可以装3个路由器吗)

  • OTG连接什么意思

    OTG连接什么意思

  • android设备什么意思(android设备什么意思有啥用)

    android设备什么意思(android设备什么意思有啥用)

  • 机顶盒不亮灯怎么回事(机顶盒的灯不亮)

    机顶盒不亮灯怎么回事(机顶盒的灯不亮)

  • 微信绑定别人手机号有影响吗(微信绑定别人手机号)

    微信绑定别人手机号有影响吗(微信绑定别人手机号)

  • AirPods Pro怎么查看电量(airpods pro怎么查序列号)

    AirPods Pro怎么查看电量(airpods pro怎么查序列号)

  • 怎样使脚注数字带圈(脚注的数字怎么加圆圈)

    怎样使脚注数字带圈(脚注的数字怎么加圆圈)

  • 小米8se怎么设置电池百分比(小米8se怎么设置悬浮窗)

    小米8se怎么设置电池百分比(小米8se怎么设置悬浮窗)

  • xs有没有广角(xsmax广角镜头怎么开)

    xs有没有广角(xsmax广角镜头怎么开)

  • 苹果11发售时间(苹果12发售时间)

    苹果11发售时间(苹果12发售时间)

  • ps中字体加粗在哪(ps里面字体加粗)

    ps中字体加粗在哪(ps里面字体加粗)

  • ipad双重认证是什么意思(双重认证ipad一直让输密码)

    ipad双重认证是什么意思(双重认证ipad一直让输密码)

  • 小米8se怎么设置铃声(小米8se怎么设置门禁卡功能)

    小米8se怎么设置铃声(小米8se怎么设置门禁卡功能)

  • 万用表档位功能有哪些(万用表档位的使用方法)

    万用表档位功能有哪些(万用表档位的使用方法)

  • 抖音里怎么收藏音乐(抖音里怎么收藏别人的视频)

    抖音里怎么收藏音乐(抖音里怎么收藏别人的视频)

  • 网络电视怎么看中央台(网络电视怎么看直播电视)

    网络电视怎么看中央台(网络电视怎么看直播电视)

  • 公司附加税怎么计算
  • 什么是试算平衡?如何进行试算平衡
  • 兼职人员的工资怎么算
  • 电子税务局怎么添加财务负责人
  • 增值税都有哪些科目
  • 应付票据的处理
  • 建账录入期初数据需要看哪个表
  • 非货币性资产交换的记忆口诀
  • 预付了订金收到发票怎么做分录?
  • 净资产合计低于实际收益
  • 银行贷款损失的认定标准
  • 总公司委托分公司开票的委托书
  • 现金出资可以吗
  • 存根联和记账联丢失有影响吗
  • 招商费用计入哪个明细科目
  • 费用类有什么科目
  • 如何理解结算方式以及结算方式有哪些?
  • 企业拨给工会的补助怎么记账
  • 进口技术服务需要向海关备案吗
  • 季度申报利润表怎么填
  • 白酒消费税最低计税价格
  • 如何恢复回收站永久删除的文件
  • 股东以房产投资入股,增值税免吗
  • 使用时间
  • 汇付的注意事项有哪些内容
  • 班夫国家公园最佳旅游时间
  • laravel app接口
  • 企业资产损失所得税税前扣除
  • php写文件函数
  • php转utf8
  • php下载功能
  • 多申报缴纳的企业年金
  • vue3 hooks实现
  • vue 动态组件
  • 手把手教大家
  • php返回数组中所有的值的函数是什么?
  • bash详解
  • 试生产产品计入研发费用吗
  • 员工体检费计入福利费吗
  • 生产过程报废和返工产生的成本
  • 增值税发票作废后怎么处理
  • 帝国cms视频教程
  • pandas遍历某一列将字符串转换为列表
  • 代扣税费分录
  • mongodb的安装配置
  • 国税里货币资金怎么算
  • mysql获取字段值的长度
  • 公司找个人干活
  • 一般纳税人附加税减半征收政策2023
  • 在网上订机票怎么订
  • 工厂不开票怎么办
  • 职工住房补贴能否计入工资总额在税前扣除?
  • 确定收入 记账凭证摘要怎么写
  • 融资租赁怎么开收据
  • mysql 临时表
  • fedora os
  • freebsd重启命令
  • win7 word
  • 怎么查看win7系统电脑访问了哪些应用程序
  • win10动态磁贴不更新
  • windows10预览版是什么
  • win10高对比度设置点了没反应
  • 运行方式包括什么方式
  • Ubuntu 12.04安装Xen常见问题及解决方法汇总
  • windows运行在哪
  • quickres.exe - quickres是什么进程 作用是什么
  • Win10桌面图标没有了
  • windows10玩游戏卡吗
  • perl时间函数
  • cocos2dx怎么用啊
  • jquery.js
  • node+express+ejs制作简单页面上手指南
  • 安卓 图形api
  • shell脚本实例精讲
  • js遍历foreach
  • jquery input
  • Android之ContentProvider
  • js 原型继承的几种方法
  • 纳税申报表如何打印
  • 如何理性看待出轨
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设