javascript - 检测由于下载栏(chrome、latest edge、firefox)而导致的窗口调整大小与一般窗口调整大小
问题描述
我有一个遗留的 web 应用程序,它具有超级复杂的调整大小事件绑定。它支持页面内的类似桌面的窗口(我知道......)并且它们都在调整大小时缩放。
这实际上执行得很好,除了在一种情况下:当您单击此应用程序上的 PDF 链接并将其下载到浏览器时,然后在新选项卡而不是系统查看器中打开 PDF(如果这是用户的浏览器设置)。然后当关闭选项卡并返回应用程序的选项卡时,它会在调整大小逻辑上花费过多的时间(从单击拖动窗口角落的正常调整大小逻辑时间为 ~1-3s,这就像 ~15-20s)
我认为当下载栏弹出页面并打开新标签时,可能会同时触发多个调整大小。已经有一个非常大(1500 毫秒)的去抖动器,但可能是关于打开新标签页/下载栏调整大小而不是单击拖动调整大小使去抖动器不适用于这种情况),并在关闭 PDF 和返回应用程序选项卡。
我们不能只告诉用户在系统查看器中打开他们的 PDF,我需要一些关于如何开始尝试解决此问题的指导。(或帮助我尝试的路径)。
我正在尝试的路径是:我想检测来自下载栏的调整大小,而不是出于其他原因(也许 y 增量与下载栏高度完全相同??有没有办法做到这一点?)并且只返回false,如果没有调整50-100px,我们不在乎,当他们关闭它时,无论如何它都会正常调整大小。
解决方案
这是我过去用来处理被事件淹没的代码
import raf from 'raf'
let rafId = null
function onResize() {
if(!rafId) {
rafId = raf(() => {
your_resize_function()
rafId = null
})
}
}
window.addEventListener('resize', onResize)
它requestAnimationFrame
用于延迟启动和一个简单的标志来阻止它被多次调用。我发现这比使用要好得多,debounce()
因为它适应了调用堆栈的繁忙程度。
推荐阅读
- sql - SELECT 以从由连接站对组成的数据中查找每个站的终端站
- reactjs - 如何在内容丰富的富文本中呈现超链接?
- php - PHP解析错误:语法错误:意外','
- typescript - 无法使用 webpack 解析子模块
- windows - 为什么 CMAKE_BUILD_TYPE 在 Windows 上预先设置了单一配置生成器?
- javascript - 在不使用新关键字的情况下实现记录器功能
- r - 确定每个数据框行的最大值列,考虑平局
- r - PCA图中的“贡献”比例
- python-3.x - Python内置socket包升级
- c# - 如果操作返回类型是 API 中的自定义类,如何返回状态码?