jQuery:如何动态检测窗口宽度?


70

我的页面上有一个滚动元素(使用jScrollPane jQuery插件)。我要完成的是一种通过检测浏览器窗口的宽度来关闭滚动窗口的方法。我正在做一个响应式布局,并且我希望在浏览器小于某个宽度时关闭此滚动功能。我可以在刷新页面时使其工作,但是当我调整浏览器窗口的大小时,宽度值不会即时更新。

现在,如果我从一个宽为1000像素的窗口开始,然后将其尺寸调整为350像素,则滚动功能仍然存在。我希望滚动功能在浏览器宽度达到440px时立即关闭。

这是我到目前为止的代码。

var windowsize = $(window).width();

$(window).resize(function() {
  var windowsize = $(window).width();
});

if (windowsize > 440) {
  //if the window is greater than 440px wide then turn on jScrollPane..
    $('#pane1').jScrollPane({
       scrollbarWidth:15, 
       scrollbarMargin:52
    });
}

2
将您的代码移到的回调中resize,请注意,您想限制执行resize以避免过度调用它
Kris Ivanov 2012年

Answers:


154

更改变量不会神奇地执行if-block中的代码。将通用代码放在函数中,然后绑定事件,然后调用该函数:

$(document).ready(function() {
    // Optimalisation: Store the references outside the event handler:
    var $window = $(window);
    var $pane = $('#pane1');

    function checkWidth() {
        var windowsize = $window.width();
        if (windowsize > 440) {
            //if the window is greater than 440px wide then turn on jScrollPane..
            $pane.jScrollPane({
               scrollbarWidth:15, 
               scrollbarMargin:52
            });
        }
    }
    // Execute on load
    checkWidth();
    // Bind event listener
    $(window).resize(checkWidth);
});

谢谢!这几乎对我有用。但这是一个奇怪的问题。当我使浏览器窗口小于440px时,刷新页面,滚动功能就不存在了(很好!)。当我将窗口的大小调整为大于440时,便具有滚动功能(也不错!)。但是,当我将窗口的大小减小到小于440时,滚动功能不会消失(不好)。
达斯汀

1
@DustinMcGrew这是由您的逻辑定义的:当窗口的宽度小于440时,什么也没有发生(甚至没有复位)。您应该能够解决此问题。如果不是,请共享有关此代码应用程序的更多详细信息。
罗布W

3
啊,你是对的!只需添加一个else语句并调用jScrollPaneRemove()函数。现在可以正常工作:)
达斯汀

是否在函数外部存储引用会优化效率,因为js不必在每次调用函数时都创建/查找新引用?
LazerSharks

1
@Gnuey该resize事件被称为非常大小调整过程中经常。jQuery对象的构造非常昂贵,因此将引用存储在函数之外确实是最佳选择。请注意,这仅适用于不变的对象/元素。该window对象再也不会更改了,并且由标识的元素#panel应该是唯一的(ID是唯一的),因此可以安全地假定包装此元素的jQuery对象也将保持有效。
Rob W

18

将您的if条件放入resize函数中:

var windowsize = $(window).width();

$(window).resize(function() {
  windowsize = $(window).width();
  if (windowsize > 440) {
    //if the window is greater than 440px wide then turn on jScrollPane..
      $('#pane1').jScrollPane({
         scrollbarWidth:15, 
         scrollbarMargin:52
      });
  }
});

如此简单但不明显的解决方法,谢谢。
Lizardx

1

下面是我在屏幕尺寸低于768px时隐藏一些Id元素的操作,而在高于768px时显示出来的内容。效果很好。

var screensize= $( window ).width();

if(screensize<=768){
        if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0)
            {
                $('#column-d0f6e77c699556473e4ff2967e9c0251').css('display','none');
            }
}
else{
        if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0)
            {
                $('#column-d0f6e77c699556473e4ff2967e9c0251').removeAttr( "style" );
            }

}
changething = function(screensize){
        if(screensize<=768){
            if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0)
            {
                $('#column-d0f6e77c699556473e4ff2967e9c0251').css('display','none');
            }
        }
        else{
        if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0)
            {
                $('#column-d0f6e77c699556473e4ff2967e9c0251').removeAttr( "style" );
            }

        }
}
$( window ).resize(function() {
 var screensize= $( window ).width();
  changething(screensize);
});

0

我不知道这在您调整页面大小时是否对您有用:

$(window).resize(function() {
       if(screen.width == window.innerWidth){
           alert("you are on normal page with 100% zoom");
       } else if(screen.width > window.innerWidth){
           alert("you have zoomed in the page i.e more than 100%");
       } else {
           alert("you have zoomed out i.e less than 100%");
       }
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.