【问题标题】:automatically detect web browser window width change?自动检测网络浏览器窗口宽度变化?
【发布时间】:2011-01-11 11:34:48
【问题描述】:

我知道你用 $(window).width() 可以得到网络浏览器的大小。

我想检测用户何时更改其网络浏览器的大小,以便我可以重新调整列宽。有没有办法自动检测到这一点,还是我必须使用 setTimeinterval 循环并查看它是否已更改?

【问题讨论】:

  • 请记住,如果您想做的是在屏幕尺寸发生变化时修改您的设计(= CSS),那么您正在寻找的是media queries。你不需要任何 JS 来做到这一点。例如:@media max-width: 700px { body { yourCSS } } 只有在屏幕宽度小于 700 像素时才会设置 body 元素的样式。

标签: javascript jquery browser window detect


【解决方案1】:

这是我为同一件事编写的一小段代码。

(function () {
    var width = window.innerWidth;

    window.addEventListener('resize', function () {
       if (window.innerWidth !== width) {
           window.location.reload(true);
       }
    });
})();

【讨论】:

    【解决方案2】:

    您可能想使用 debouncehttps://davidwalsh.name/javascript-debounce-function

    否则

    window.addEventListener("resize")
    

    在调整窗口大小时将一直触发。 这会增加你的 CPU 开销。

    【讨论】:

      【解决方案3】:

      写下来是因为这些答案都没有给出现代最佳实践的方法:

      window.addEventListener("resize", function(event) {
          console.log(document.body.clientWidth + ' wide by ' + document.body.clientHeight+' high');
      })
      

      【讨论】:

        【解决方案4】:

        我用 media="only screen and (min-width: 750px)" href="... 宽窗口的 css 文件" media="only screen and (max-width: 751px)" href="...css file for mobiles"

        当我左右移动右窗口边框以增加和减少窗口大小时,我的网络浏览器会自动从宽窗口切换到移动窗口。我不必包含任何 Javascript 代码来检测窗口宽度。这适用于 Windows 和 Macintosh 计算机上的 Chrome、Firefox 和 Internet Explorer。

        【讨论】:

          【解决方案5】:

          MDN 中,他们提供了非常好的 Javascript 独立代码:

          window.onresize = resize;
          
          function resize()
          {
           alert("resize event detected!");
          }

          如果您只需要这种功能,我建议您使用它。

          【讨论】:

            【解决方案6】:

            需要记住的一点——至少在 IE 中,调整大小事件气泡、定位元素和文档正文可以触发独立的调整大小事件。

            此外,当窗口或元素通过拖动调整大小时,IE 会触发连续的“调整大小”事件流。其他浏览器等待 mouseup 触发。

            IE 是一个足够大的播放器,拥有一个可以调整事件大小的中间处理程序很有用——即使您只将 IE 客户端分支到它。

            ie 处理程序在调用“真正的”调整大小处理程序之前设置了一个短暂的超时时间(100-200 毫秒)。如果在超时之前再次调用相同的函数,它要么是冒泡事件,要么是窗口被拖到新的大小,所以清除超时并重新设置。

            【讨论】:

              【解决方案7】:

              JavaScript 事件被命名为window.onresize

              JQuery 绑定被命名为.resize()

              【讨论】:

                【解决方案8】:

                试试resize event

                $(window).resize(function() {
                  console.log('window was resized');
                });
                

                【讨论】:

                • 这也是由移动浏览器缩放触发的,应该有一个如果有手动检查大小与以前的值。
                • 但这并不是所要求的(或我正在寻找的)。例如,如果您在 chrome 中下载文件,则会出现页面底部的“下载”栏,更改浏览器高度并正确触发调整大小事件。这不是宽度变化,所以你会得到一个需要过滤掉的事件(这就是我要找的......)
                猜你喜欢
                • 2012-05-31
                • 2012-05-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-04-07
                • 2011-08-29
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多