位置: IT常识 - 正文

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

发布时间:2024-01-03
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)

  • windows10设备管理器在哪(windows10设备管理器找不到蓝牙)

    windows10设备管理器在哪(windows10设备管理器找不到蓝牙)

  • 蚂蚁心愿钱如何转出(蚂蚁心愿的钱可以直接花么)

    蚂蚁心愿钱如何转出(蚂蚁心愿的钱可以直接花么)

  • ios13小白点哪里开启(ios13.5小白点怎么设置)

    ios13小白点哪里开启(ios13.5小白点怎么设置)

  • 迅雷超级会员和白金会员区别(迅雷超级会员和百度网盘超级会员)

    迅雷超级会员和白金会员区别(迅雷超级会员和百度网盘超级会员)

  • 荣耀30搭载的是什么处理器(荣耀30用的是什么处理器)

    荣耀30搭载的是什么处理器(荣耀30用的是什么处理器)

  • 怎样在微信群里踢人(怎样在微信群里转账给某一个人)

    怎样在微信群里踢人(怎样在微信群里转账给某一个人)

  • 抖音花钱上热门还需要审核 需要多久(抖音花钱上热门点赞是真实的吗)

    抖音花钱上热门还需要审核 需要多久(抖音花钱上热门点赞是真实的吗)

  • 腾讯会议播放视频没声音(腾讯会议播放视频卡顿怎么办)

    腾讯会议播放视频没声音(腾讯会议播放视频卡顿怎么办)

  • 蜂鸟众包是抢单还是派单(蜂鸟众包抢单辅助脚本)

    蜂鸟众包是抢单还是派单(蜂鸟众包抢单辅助脚本)

  • 微信运动一般延迟多久(微信运动延迟多久更新)

    微信运动一般延迟多久(微信运动延迟多久更新)

  • 10mbps是几兆(10Mbps是几兆宽带)

    10mbps是几兆(10Mbps是几兆宽带)

  • 小米手机重启到recovery模式是什么意思(小米手机重启到恢复模式)

    小米手机重启到recovery模式是什么意思(小米手机重启到恢复模式)

  • 垂直同步什么意思(垂直同步有什么用)

    垂直同步什么意思(垂直同步有什么用)

  • 一加7pro游戏模式怎么设置(一加7pro游戏模式怎么关闭)

    一加7pro游戏模式怎么设置(一加7pro游戏模式怎么关闭)

  • oppo手机定位在哪里打开(OPPO手机定位在哪里找到)

    oppo手机定位在哪里打开(OPPO手机定位在哪里找到)

  • oppoa59s忘记锁屏密码了怎么办(oppoa59s忘记锁屏密码怎么办)

    oppoa59s忘记锁屏密码了怎么办(oppoa59s忘记锁屏密码怎么办)

  • qq情侣关系别人看得到吗(扣扣情侣关系别人能看见吗)

    qq情侣关系别人看得到吗(扣扣情侣关系别人能看见吗)

  • wps填空题的横线怎么打(wps填空的横线怎么弄)

    wps填空题的横线怎么打(wps填空的横线怎么弄)

  • 多线程模式有什么作用(多线程模式开了更卡吗)

    多线程模式有什么作用(多线程模式开了更卡吗)

  • 电池健康度85%要换吗(电池健康度85%用了多久)

    电池健康度85%要换吗(电池健康度85%用了多久)

  • 华为2016年上市的手机(华为2016年上市的手机型号图片)

    华为2016年上市的手机(华为2016年上市的手机型号图片)

  • 联机宝怎么用(联机宝如何连接无线网络)

    联机宝怎么用(联机宝如何连接无线网络)

  • 路由器用户名和密码是什么(路由器用户名和密码忘了怎么查)

    路由器用户名和密码是什么(路由器用户名和密码忘了怎么查)

  • 微信号封了多久才能用(微信号封了多久才不能收对方发的到信息)

    微信号封了多久才能用(微信号封了多久才不能收对方发的到信息)

  • python分割拼接函数的介绍(python分割语句)

    python分割拼接函数的介绍(python分割语句)

  • 分公司需要独立法人吗
  • 公司注册资本认缴
  • 扫码开票开错了怎么改
  • 账载金额和实际金额的区别
  • 装卸搬运服务属于什么税目
  • 增值税调整收入税额差额怎么写
  • 单位支付给职工的一次性补助金怎么入账
  • 民办非营利组织幼儿园清算时固定资产如何处理
  • 工会经费计提多了跨年
  • 企业所得税季报资产总额怎么填
  • 未认证的进项也就是库存
  • 季度企业所得税申报表怎么填写
  • 发票纳税人识别号错了能重新开吗
  • 一般纳税人企业要交哪些税
  • 金税盘怎么开红字发票流程
  • 企业所得税退税会计分录
  • 收入准则建造合同预付款
  • 商品返点收入账务处理
  • 贷款利息可以抵扣吗
  • 企业所得税季报怎么申报
  • 固定资产折旧有几类
  • 无法划分进项税额包括什么
  • 临时文件夹在哪个位置
  • cpu天梯图2022最新排行榜
  • 预付账款是企业销售过程中形成的一种非货币形式的债权
  • 网站防止被刷票怎么解决
  • 固定资产没提完折旧,提前处理
  • 商贸企业税收优惠政策
  • PHP:pg_send_prepare()的用法_PostgreSQL函数
  • 应收票据到期收款
  • redirect_uri参数错误的解决方法(必看)
  • 控制器操作视频
  • 注意力机制有什么作用
  • 汽车折旧年限及年限
  • Mysql半同步复制原理及问题排查
  • 进项发票入账但没有发票
  • 收到现金投资计入什么科目
  • 资产减值损失属于什么科目
  • 个人社保信息变更流程
  • sqlserver附加数据库语句
  • 建筑企业异地施工预缴企业所得税
  • 食堂费用没有发票
  • 交强险还要交车船税?
  • 外购商品发放给员工 进项税额能不能抵扣
  • 公司法人必须在公司名下缴纳社保吗
  • 个人如何开增值税普通电子发票
  • 计提工资要附什么凭证
  • 报销运输费用
  • 银行回单自助打印可以打多久的记录
  • 印花税需要计提税金及附加吗
  • 怎么看财务报表平不平
  • 汇总帐凭证处理
  • 明细分类账的填写
  • mysql的zip包怎么安装
  • mysql@变量
  • win8系统连接网络
  • winxp更新到win10
  • Tech Ed 2008:HPC Server 2008讲解
  • windows8.1安装windows7
  • win7还是win8好用
  • 一招让你的wifi网速翻倍
  • 进程mmc.exe
  • 使用windows管理无线
  • w10系统输入法
  • linux 中的MYSQL命令汇总 适合学习linux下配置mysql的朋友
  • form表单中input设置为readonly和disabled的区别
  • 用css制作网页的步骤
  • perl -i -pe
  • cocoscreator lua
  • jquery输入框改变事件
  • 获取nodejs命令行信息
  • jquery封装的函数
  • python 中
  • sqlyog使用
  • javascript面向
  • 发票系统怎么设置打印
  • 陕西地税发票怎么重新打印
  • 上海地铁和公交乘车码
  • 四川税收总额
  • 烟台税务app
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号