位置: 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)

  • vivox70pro+怎么打开悬浮球(vivo手机怎么打印)

    vivox70pro+怎么打开悬浮球(vivo手机怎么打印)

  • 微信怎么解除身份证绑定(微信怎么解除身份证信息绑定)

    微信怎么解除身份证绑定(微信怎么解除身份证信息绑定)

  • 快手小店买东西只能申请一次退款吗(快手小店买东西钱是直接打给店家的吗)

    快手小店买东西只能申请一次退款吗(快手小店买东西钱是直接打给店家的吗)

  • 淘宝怎么关闭退款(淘宝怎么关闭退款信息)

    淘宝怎么关闭退款(淘宝怎么关闭退款信息)

  • 华硕充到80就不充了,电池咋回事(华硕充到80就不充了怎么设置)

    华硕充到80就不充了,电池咋回事(华硕充到80就不充了怎么设置)

  • 微信密码错误会被锁多久能解除(微信密码错误会被锁多久)

    微信密码错误会被锁多久能解除(微信密码错误会被锁多久)

  • 华为p30备忘录在哪(华为p30备忘录在手机哪个文件夹)

    华为p30备忘录在哪(华为p30备忘录在手机哪个文件夹)

  • 钉钉麦克风权限在哪设置(钉钉麦克风权限关了,视频会议还能听见声音吗)

    钉钉麦克风权限在哪设置(钉钉麦克风权限关了,视频会议还能听见声音吗)

  • 绝对地址符号怎么输入(绝对地址符号怎么打出来)

    绝对地址符号怎么输入(绝对地址符号怎么打出来)

  • 华为ags2-w09hn是什么型号(华为ags2_w09)

    华为ags2-w09hn是什么型号(华为ags2_w09)

  • 路由器工作在什么层(路由器工作在什么上)

    路由器工作在什么层(路由器工作在什么上)

  • 佳能g7x mark 3和2的区别(佳能g7xmark3和200D2对比)

    佳能g7x mark 3和2的区别(佳能g7xmark3和200D2对比)

  • 为什么微信扫一扫不能用(为什么微信扫一扫扫不出来)

    为什么微信扫一扫不能用(为什么微信扫一扫扫不出来)

  • 闲鱼怎么撤回已发的消息(闲鱼怎么撤回已发图片)

    闲鱼怎么撤回已发的消息(闲鱼怎么撤回已发图片)

  • 微信也可以开直播吗(微信可以直接开直播吗)

    微信也可以开直播吗(微信可以直接开直播吗)

  • 苹果性能小钢炮是什么手机(苹果性能小钢炮6sp)

    苹果性能小钢炮是什么手机(苹果性能小钢炮6sp)

  • awifi是什么(awifi是什么网络安全吗)

    awifi是什么(awifi是什么网络安全吗)

  • 打电话前加86什么意思(联系电话前面加86是什么意思?)

    打电话前加86什么意思(联系电话前面加86是什么意思?)

  • 苹果xr双卡双待缺点(苹果XR双卡双待信号好吗)

    苹果xr双卡双待缺点(苹果XR双卡双待信号好吗)

  • 电脑还原系统按哪个键(电脑还原系统按什么仓建操作)

    电脑还原系统按哪个键(电脑还原系统按什么仓建操作)

  • 淘宝店被投诉盗图了咋办(淘宝店铺被投诉盗用图片需要申诉吗)

    淘宝店被投诉盗图了咋办(淘宝店铺被投诉盗用图片需要申诉吗)

  • 三星s10需要贴膜吗(三星s10需要贴膜不)

    三星s10需要贴膜吗(三星s10需要贴膜不)

  • p30青春版是什么型号(华为p30青春版是5g手机吗)

    p30青春版是什么型号(华为p30青春版是5g手机吗)

  • 钉钉常用表情怎么删除(钉钉新表情)

    钉钉常用表情怎么删除(钉钉新表情)

  • 微信瓶子是不是取消了(微信瓶子不能用了现在都用的是什么)

    微信瓶子是不是取消了(微信瓶子不能用了现在都用的是什么)

  • gsicon.exe是什么进程 作用是什么 gsicon进程查询

    gsicon.exe是什么进程 作用是什么 gsicon进程查询

  • 所得税季度预缴纳税申报表
  • 缴纳城镇土地使用税标准
  • 小规模企业开具普通发票月如何做账
  • 企业为员工承担的个税可以税前扣除吗
  • 做网站的费用会计分录
  • 人员工资成本占收入多少合适,占总成本多少合适
  • 增值税发票验证
  • 超标公积金应怎么办理
  • 简易计税项目的分包款为建筑服务劳务费,可以扣除吗
  • 银行不可税前抵扣的情形
  • 各省市地税发票怎么开
  • 增值税专用发票怎么开
  • 员工疗养要扣公休假吗
  • 增值税专用发票有效期是多长时间
  • 增值税进项销项怎么算
  • 小贷公司贷款的流程是什么
  • 税务票开错了怎么办理退税
  • 香港企业股东分红税
  • 小米6桌面图标消失了
  • 支付宝账户记录
  • 加班费如何做账
  • 股东变更股权转让未分配利益
  • cpqa1000.exe是安全进程吗 cpqa1000进程有什么作用
  • 栀子花的养殖方法和注意事项茉莉花
  • PHP:GregorianToJD()的用法_日历函数
  • 企业所得税的税收筹划
  • 投资收益是否缴增值税
  • php常用设计模式(大总结)
  • php正则函数内容匹配
  • 元素鼠标失灵了怎么办
  • ps大型文件储存位置在哪
  • 万科金域华府二手房房源
  • python怎么查看文件路径
  • js逻辑表达式
  • phpcms怎么样
  • 员工手机补助单怎么做账
  • 企业生产过程中执行标准要把握好以下原则
  • vue打包找不到文件
  • 差旅费报销范文
  • 报销宽带费属于什么费用
  • 产业增加值是增长量吗
  • 小规模纳税人交通运输服务税率
  • 专项应付款和政府补助的区别
  • 长期应付款的会计编号
  • 商场返现活动怎么入账
  • 安全生产费相关规定
  • 给投资人的利润属于什么科目
  • 加工企业如何计税
  • 享受研发费用加计扣除需要什么条件
  • 预计负债 负债 区别
  • 工会经费缴纳会计分录
  • 冲减多计提的工资摘要怎么写
  • 业务招待费会计科目
  • 企业给员工租的公寓
  • 固定资产需要具备的条件
  • 小规模纳税人季报网上申报流程
  • 红字冲销有没有时间限制
  • ubuntu20.04怎么用
  • 微软和苹果是什么关系
  • mac10.15系统
  • win10预览版选哪个
  • rtc resume
  • win7系统误删文件可以恢复吗
  • win8软件安装
  • windows8.1怎么用
  • cocoscreator动画
  • Extjs TriggerField在弹出窗口显示不出问题的解决方法
  • 手机游戏服务器无响应是怎么回事
  • jquery插件使用教程
  • linux使用ssh远程连接服务器
  • shell随机
  • Python 'takes exactly 1 argument (2 given)' Python error
  • unity mesh编程
  • js设置option
  • 国家税务总局增值税发票查验平台官网
  • 税务局如何查询社保明细
  • 增值税即征即退申报表怎么填
  • 所得税调增调减搞不清
  • 珠海车船税的缴纳地点
  • 企业资金运转资金投放
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设