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

  • 抖音可以连续自动播放吗(抖音可以连续自动关注吗)

    抖音可以连续自动播放吗(抖音可以连续自动关注吗)

  • 荣耀9x的马达是什么(荣耀9马达是什么)

    荣耀9x的马达是什么(荣耀9马达是什么)

  • 苹果怎么设置录视频功能(苹果怎么设置录屏的清晰度)

    苹果怎么设置录视频功能(苹果怎么设置录屏的清晰度)

  • 手机提醒系统更新要不要更新(手机提醒系统更新怎么弄)

    手机提醒系统更新要不要更新(手机提醒系统更新怎么弄)

  • 搜狗输入法怎么设置打字出现表情包(搜狗输入法怎么设置)

    搜狗输入法怎么设置打字出现表情包(搜狗输入法怎么设置)

  • 微信吐舌头表情怎么打(微信吐舌头表情是哪个)

    微信吐舌头表情怎么打(微信吐舌头表情是哪个)

  • 剪映降噪处理失败怎么回事(剪映降噪处理失败请重试)

    剪映降噪处理失败怎么回事(剪映降噪处理失败请重试)

  • 腾讯视频横屏如何设置(腾讯视频横屏如何变竖屏)

    腾讯视频横屏如何设置(腾讯视频横屏如何变竖屏)

  • 电脑有红外线功能吗(电脑红外线功能是监控吗)

    电脑有红外线功能吗(电脑红外线功能是监控吗)

  • pro和max的区别(华为pro和max的区别)

    pro和max的区别(华为pro和max的区别)

  • 小爱同学有摄像头监控吗(小爱同学有摄像功能吗)

    小爱同学有摄像头监控吗(小爱同学有摄像功能吗)

  • 微信红包封面怎么设置(微信红包封面怎么免费领取)

    微信红包封面怎么设置(微信红包封面怎么免费领取)

  • 腾讯会议能看到别人在干什么吗(腾讯会议能看到所有人的脸吗)

    腾讯会议能看到别人在干什么吗(腾讯会议能看到所有人的脸吗)

  • 注册网店需要多少资金(注册网店需要多久)

    注册网店需要多少资金(注册网店需要多久)

  • 苹果6s plus来电时来电闪光灯怎么设置(苹果6splus来电闪光灯怎么设置)

    苹果6s plus来电时来电闪光灯怎么设置(苹果6splus来电闪光灯怎么设置)

  • 为什么苹果电脑只有一个c盘(为什么苹果电脑充不上电)

    为什么苹果电脑只有一个c盘(为什么苹果电脑充不上电)

  • qq空间被挡访客可解锁是什么意思(怎么看qq空间被挡访客)

    qq空间被挡访客可解锁是什么意思(怎么看qq空间被挡访客)

  • 如何让微信视频有美颜效果(如何让微信视频号不让别人看到自己发的作品)

    如何让微信视频有美颜效果(如何让微信视频号不让别人看到自己发的作品)

  • 华为手机屏幕录制快捷键(华为手机屏幕录制文件保存在哪)

    华为手机屏幕录制快捷键(华为手机屏幕录制文件保存在哪)

  • 运行库是什么(运行库是啥)

    运行库是什么(运行库是啥)

  • svmmode是什么意思(svm mode是什么功能)

    svmmode是什么意思(svm mode是什么功能)

  • 怎么查手机定位找人

    怎么查手机定位找人

  • 解决Linux下微信公众平台网页版音频无法播放的方法(linux怎么用微信)

    解决Linux下微信公众平台网页版音频无法播放的方法(linux怎么用微信)

  • imonnt.exe进程是什么文件 是病毒程序吗 imonnt进程查询(进程mmc.exe)

    imonnt.exe进程是什么文件 是病毒程序吗 imonnt进程查询(进程mmc.exe)

  • 计算机网络的基本组成(计算机网络的基本概念)

    计算机网络的基本组成(计算机网络的基本概念)

  • 关于帝国CMS 6.5功能:网站安全防火墙使用说明(关于帝国战争的游戏)

    关于帝国CMS 6.5功能:网站安全防火墙使用说明(关于帝国战争的游戏)

  • 营业税加收滞纳金的规定
  • 成本结算怎么处理?
  • 开发票,对方收取税点,如何计算
  • 个税退还会计分录
  • 有两处收入的怎么报个税汇算清缴
  • 进项认证勾选在哪里操作
  • 航天金税的服务费如何抵扣
  • 税控盘怎么注销需要带什么东西
  • 代国外佣金代扣税金账务怎么处理?
  • 营改增后开餐厅需要交什么税?
  • 公司理财收益账务处理
  • 普通发票跨年作废有影响吗
  • 发票抬头写个人有效吗
  • 预缴税款是开票金额的多少
  • 财务会计中的费用
  • 个人所得税需要计提吗?怎么做会计分录
  • 个税纳税期数如何规定的 怎么选择
  • 投资性房地产其他综合收益递延所得税
  • 有限责任公司自然人独资可以增加股东吗
  • 向购买方收取的价外费用
  • 电子税务局首次申请专票
  • 财务刻章属于什么行业
  • 苹果mac os x 怎样打开DVD播放程序
  • 红魔3和一加7pro哪个好
  • 如何在excel中添加选项内容
  • 0xc0000142怎么修复
  • 怎么做增值税
  • 简易征收做账
  • php字符串定义的三种方式
  • yolov5 c
  • 最新版本金铲铲强势阵容
  • 销售下脚料所收的费用
  • conda配置虚拟环境
  • 收到转账怎么写分录
  • this.$router.push点了后hash地址改变了,页面却不跳转
  • 网络安全实验室
  • 减资资产负债表怎么填
  • 短期投资属于短期资产吗
  • 长期借款的核算分为哪三个阶段
  • 商业折扣,现金折扣,销售折让的核算特点
  • 房企预缴税款会退税吗
  • 本年利润在借方代表亏损吗
  • 收到发票现金支付
  • 财务没有及时缴费怎么办
  • mysql基本sql语句大全(基础用语篇)
  • 所得税预缴申报表
  • 生育津贴如何做帐
  • 单位代扣公积金是什么意思
  • 视同销售的会计处理是指?
  • sql server2012新建一个数据表
  • 控股合并的账务处理
  • 多记财务费用怎么调整
  • 补提企业所得税后怎么调整未分配利润
  • 固定资产竣工前予以资本化吗
  • 发票冲红的会计怎么处理
  • 零配件供应是什么意思
  • 无形资产摊销费怎么算
  • 凭证导致账簿错误
  • mysql的拼接符号
  • java如何连接sql
  • vim如何操作
  • dwrg_repair.exe什么意思
  • win10打开文件夹弹出新窗口
  • rpm格式如何安装
  • win10系统桌面怎么设置密码
  • suse linux教程
  • oodag.exe - oodag是什么进程 有什么作用
  • 淘宝下载电脑
  • linux发布项目
  • perl处理特殊符号
  • awk中RS、ORS、FS、OFS的区别和联系小结
  • js判断字符串字符出现的次数
  • js中改变css文件中的样式
  • js 三元
  • html应用css
  • listview subitems
  • unity hud优化
  • html5三级菜单
  • flask框架官方文档
  • 登录电子税务局显示时间错误如果解决
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设