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

  • 如何利用博客评论来做好网站推广(博客文章的评价指标)

    如何利用博客评论来做好网站推广(博客文章的评价指标)

  • 微信好友的二维码怎么找(微信好友的二维码怎么获取)

    微信好友的二维码怎么找(微信好友的二维码怎么获取)

  • 华为荣耀30和30s区别(华为荣耀40plus)

    华为荣耀30和30s区别(华为荣耀40plus)

  • 手机热点的ip是固定的吗(手机热点的IP是根据手机号码还是手机的)

    手机热点的ip是固定的吗(手机热点的IP是根据手机号码还是手机的)

  • 手机背光坏了要换屏吗(手机背光坏了要换吗)

    手机背光坏了要换屏吗(手机背光坏了要换吗)

  • 毒发货有短信提醒吗(毒app发货的短信)

    毒发货有短信提醒吗(毒app发货的短信)

  • 什么叫有线网和无线网(什么叫有线网和无线网络)

    什么叫有线网和无线网(什么叫有线网和无线网络)

  • 华为手机怎么把微信聊天记录转移(华为手机怎么把照片传到电脑上)

    华为手机怎么把微信聊天记录转移(华为手机怎么把照片传到电脑上)

  • 人像识别验证过不了怎么办(人像识别数据获取有误)

    人像识别验证过不了怎么办(人像识别数据获取有误)

  • 小米mix2s是残血845吗(小米mix2s 8+256)

    小米mix2s是残血845吗(小米mix2s 8+256)

  • 微信连续加多少人会被限制(微信连续加多少个好友就要频繁操作被锁住)

    微信连续加多少人会被限制(微信连续加多少个好友就要频繁操作被锁住)

  • qq怎么防止qq被盗(怎么防止qq被别人监视)

    qq怎么防止qq被盗(怎么防止qq被别人监视)

  • 腾讯云计算是什么意思(腾讯云计算中心做什么的)

    腾讯云计算是什么意思(腾讯云计算中心做什么的)

  • iphonexs长宽高(iphonexs长宽高多少cm)

    iphonexs长宽高(iphonexs长宽高多少cm)

  • 苹果手机怎么弄天气预报(苹果手机怎么弄门禁卡开门)

    苹果手机怎么弄天气预报(苹果手机怎么弄门禁卡开门)

  • 快手一天能删多少粉丝(快手一天可以删除多少粉丝)

    快手一天能删多少粉丝(快手一天可以删除多少粉丝)

  • vivoz5x怎么设置呼吸灯(vivoz5x怎么设置双系统)

    vivoz5x怎么设置呼吸灯(vivoz5x怎么设置双系统)

  • 拼多多下单怎么备注(拼多多下单怎么买运费险)

    拼多多下单怎么备注(拼多多下单怎么买运费险)

  • 设置pin什么意思(戴尔电脑设置pin什么意思)

    设置pin什么意思(戴尔电脑设置pin什么意思)

  • 华为荣耀20pro怎么分屏(华为荣耀20Pro怎么样)

    华为荣耀20pro怎么分屏(华为荣耀20Pro怎么样)

  • 三星s6手机呼叫转移设置在哪(三星s6呼叫等待怎么设置)

    三星s6手机呼叫转移设置在哪(三星s6呼叫等待怎么设置)

  • 抖音视频下载不了怎么回事(抖音视频下载不了怎么提取音乐)

    抖音视频下载不了怎么回事(抖音视频下载不了怎么提取音乐)

  • hp台式机win10改win7(hp台式机怎么改win7)

    hp台式机win10改win7(hp台式机怎么改win7)

  • 求差函数是哪个符号(求差函数是哪个公式)

    求差函数是哪个符号(求差函数是哪个公式)

  • 一般纳税人购入固定资产的账务处理
  • 收到商业汇票计入科目
  • 公司股东和自然人股东可否代持股权
  • 影响年度损益的金额有哪些
  • 利润表中的本期金额栏内各项数字一般根据什么填列
  • 酒店应不应该为员工提供澡堂
  • 住房公积金证书插上为什么登不进去
  • 二手设备进口海关
  • 事业单位非税收入包括哪些
  • 官司赔偿费用需要发票吗
  • 劳务税能不能抵扣
  • 旅游服务费可以抵扣增值税
  • 地税评为d级纳税人是指
  • 7月财务报表行次三大变化
  • 销售蔬菜水果需要什么证件
  • 其他收益纳税
  • 企业的低值易耗品主要包括什么等
  • 免抵退系统应调整免抵退额吗?
  • 接受国外企业捐款的条件
  • 信用卡购物消费怎么算
  • 资本的不同形态
  • 用友t3新账套总账设置
  • netframework4.8安装未成功
  • 银行认购公司债券的条件
  • 如何将win11笔记本连接到家庭打印机上
  • 工资一直计提但是未发有影响吗
  • 企业购进房产会退税吗
  • 一般纳税人的月报,季报年报
  • 结转已售材料成本600元会计分录
  • 如何手机个人热点连电脑
  • 现金折扣的会计处理方法
  • 将银行借款存入银行会引起企业资产总额的变化吗
  • onekey.exe是什么
  • php time
  • ant design pro项目构建纯净版
  • 软件研发支出计入什么科目
  • 命令压缩文件
  • java微信公众号开发源码
  • 用工会经费给员工发工资
  • phpcms使用教程
  • python 读取图片
  • 现金预算表中的归还借款和支付利息怎么算
  • 沙子产量表格
  • 所得税汇算清缴调整项目
  • 残疾人就业保障金上年职工工资总额
  • mssql分布式数据库
  • PostgreSQL 创建表分区
  • 从事特殊行业
  • 建筑劳务公司何去何从
  • 研发人员的差旅费计入管理费用吗
  • 一般纳税人工程劳务发票税率是多少
  • 税控盘减免税款冲减管理费用
  • 股东捐赠给企业怎么做账
  • 收到投资方投入设备一台会计科目
  • 帮别人注册医疗器械法人有风险吗
  • 企业支付宝买东西怎么买
  • window10注册表
  • linux dd 系统
  • centos设置hostname
  • winxp/win7/win2003 电脑开机密码设置图文方法
  • win7计算机窗口菜单栏
  • win7旗舰版64位系统开机时软件设置自动启动详细图文教程
  • win10升级补丁后死机
  • 铁嘴啥意思
  • js实现下拉框联动
  • android2d游戏开发
  • mark一下怎么用
  • div style display none
  • Vuforia 4.0 beta——Object Recognition (一)
  • gimp批处理
  • [置顶]公主大人接下来是拷问时间31
  • angular scope
  • python第三方库的安装方法有哪些
  • js类继承的例子
  • jquery的实现原理
  • 青岛市国家税务局官方网站
  • 江苏电子税务局app下载
  • 现行增值税税率表2023
  • 江苏省国家税务局总局官网
  • 南通地税电话号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设