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

  • 华为悦盒怎么恢复出厂设置(华为悦盒怎么恢复出厂设置密码)

    华为悦盒怎么恢复出厂设置(华为悦盒怎么恢复出厂设置密码)

  • 查找我的iphone关机了还能找到吗(查找我的iphone关闭定位后还能定位吗)

    查找我的iphone关机了还能找到吗(查找我的iphone关闭定位后还能定位吗)

  • 苹果播客怎么用(苹果播客干嘛用的)

    苹果播客怎么用(苹果播客干嘛用的)

  • qq音乐加速qq等级没有了(qq音乐加速取消了吗)

    qq音乐加速qq等级没有了(qq音乐加速取消了吗)

  • 抖音私信出现感叹号(抖音私信感谢大哥的话)

    抖音私信出现感叹号(抖音私信感谢大哥的话)

  • 微信视频显脸大怎么调整(微信视频显脸大怎么设置)

    微信视频显脸大怎么调整(微信视频显脸大怎么设置)

  • iphone怎么关闭通话功能(Iphone怎么关闭通知震动)

    iphone怎么关闭通话功能(Iphone怎么关闭通知震动)

  • B站不能设置默认关弹幕了(b站可以设置不允许弹幕吗)

    B站不能设置默认关弹幕了(b站可以设置不允许弹幕吗)

  • 手机控制台在哪里打开(手机控制台有什么作用)

    手机控制台在哪里打开(手机控制台有什么作用)

  • 防水等级ip68能游泳吗(防水等级ip68能洗澡吗)

    防水等级ip68能游泳吗(防水等级ip68能洗澡吗)

  • 快手怎么带货需要什么条件(快手带货如何操作)

    快手怎么带货需要什么条件(快手带货如何操作)

  • QQ校园扩列怎么关闭(qq校园扩列怎么设置)

    QQ校园扩列怎么关闭(qq校园扩列怎么设置)

  • ipad钉钉直播可以分享屏幕吗(ipad钉钉直播可以投屏吗)

    ipad钉钉直播可以分享屏幕吗(ipad钉钉直播可以投屏吗)

  • 钉钉回放老师能看见吗(钉钉回放老师能否查看观看时长)

    钉钉回放老师能看见吗(钉钉回放老师能否查看观看时长)

  • 华为手机为啥铃声不响(华为手机为啥铃声不是默认铃声)

    华为手机为啥铃声不响(华为手机为啥铃声不是默认铃声)

  • 为什么腾讯视频加载不出来(为什么腾讯视频录屏是黑色的)

    为什么腾讯视频加载不出来(为什么腾讯视频录屏是黑色的)

  • 小米air2声音小怎么解决(小米air2声音小怎么办)

    小米air2声音小怎么解决(小米air2声音小怎么办)

  • 苹果手机短信一直显示有未读(苹果手机短信一键删除)

    苹果手机短信一直显示有未读(苹果手机短信一键删除)

  • 苹果8怎么强行关机(苹果8怎么强行刷机)

    苹果8怎么强行关机(苹果8怎么强行刷机)

  • ipadair支持二代笔吗(ipadair3能用二代笔吗)

    ipadair支持二代笔吗(ipadair3能用二代笔吗)

  • 苹果手机显示lte什么意思(苹果手机显示LTE是卡贴机吗)

    苹果手机显示lte什么意思(苹果手机显示LTE是卡贴机吗)

  • 苹果7相机声音怎么关(苹果7相机声音怎么开启)

    苹果7相机声音怎么关(苹果7相机声音怎么开启)

  • 微信怎么打开刷脸支付(微信怎么打开刷卡功能)

    微信怎么打开刷脸支付(微信怎么打开刷卡功能)

  • 微信号的手机号不用了怎么办(微信号的手机号注销了微信号还能用吗)

    微信号的手机号不用了怎么办(微信号的手机号注销了微信号还能用吗)

  • 华为手机怎么删除界面新闻(华为手机怎么删除内存清理)

    华为手机怎么删除界面新闻(华为手机怎么删除内存清理)

  • 芒果tv怎么解除绑定(芒果TV怎么解除会员)

    芒果tv怎么解除绑定(芒果TV怎么解除会员)

  • TensorFlow安装教程(tensorflow安装教程pycharm)

    TensorFlow安装教程(tensorflow安装教程pycharm)

  • vmstat命令  监视系统资源状态

    vmstat命令 监视系统资源状态

  • 现金流量表财务费用怎么填
  • 全年没有超过起征点需要汇算吗
  • 出租车发票上没有二维码
  • 退还押金怎么做账
  • 开了票印花税必须报吗
  • 企业年末要写财务报告吗
  • 客户减免费用邮件怎么写
  • 固定资产的折旧方法一经选定,不得随意变更
  • 红字发票是否需要写进出仓单里
  • 贷款利息进项税额转出
  • 一年内到期的非流动负债包括哪些科目
  • 施工企业已完工程成本如何结转
  • 个体工商户个人所得税怎么计算
  • 会务费税前扣除比例
  • 消费税征收范围包括
  • 个人所得税工资和实际工资对不上
  • 物业公司场地租赁费怎么开票
  • 铝合金失效分析案例
  • 资产负债表日是什么意思
  • 企业的筹建期间
  • 进口技术服务需要向海关备案吗
  • 印花税无法申报怎么回事
  • 留抵的进项税可以退吗
  • 技术转让减免所得额
  • 其他公司垫付货款合法吗
  • 金蝶存货核算的基本流程
  • Mac系统怎么设置ftp
  • win10 20h1 bug
  • win11系统怎么投屏
  • win10蓝牙搜索不到ps4手柄
  • thinkphp5 分页
  • 在php中,什么函数能将数组转化为字符串
  • 发行可转换优先股记入权益工具吗
  • php命名空间和自由空间
  • 以前年度损益调整在利润表中怎么填
  • 房产税为什么会退税
  • 难以置信含义
  • 收取包装物押金会计分录
  • node 文件
  • 结转完工产品成本的会计分录
  • python怎么生成随机矩阵
  • 制造业属不属于第二产业
  • python tkinter ttk
  • 用支票偿还货款
  • 坏账损失的会计分录小企业会计准则
  • 汇算清缴的费用标准 中汇
  • 医疗服务比
  • mysql中的索引有
  • 小规模增值税免税政策变化历程
  • 资产现金流量收益率为什么不是净利润除以平均现金流量
  • 有限合伙企业中谨慎有限合伙人的应当
  • 赠品视同销售会计分录如何编制?
  • 公司注销实收资本要清零吗?
  • 转让股权需要缴纳哪些税
  • 税控系统专用设备包括税控收款机吗
  • 电费发票开据后如何入帐?
  • 预计负债的初始计量
  • 一般纳税人拿到普票怎么处理账务
  • 施工企业主营业务收入二级科目有哪些
  • mysql不能运行
  • bios没有usb启动项解决方法联想
  • vc6_cn_full.exe
  • 如何关闭windows防火墙
  • ubuntu安装sz
  • linux targz
  • mac电脑打开safari
  • c盘越来越小了
  • ie11打不开闪退解决办法win 7
  • 基于javaweb的物流管理系统
  • cmd for /f
  • python 异常捕获
  • 如何利用工具人
  • python网络爬虫的流程图
  • 一篇文章的
  • jquery对动态生成的进行操作
  • python语言解析
  • 浙江省网上税务服务大厅
  • 广州买房退税政策2020
  • 广西南宁地税局电话
  • 西安市灵活就业社保缴费截止时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设