【问题标题】:enable a function depending on window width and window resize根据窗口宽度和窗口调整大小启用功能
【发布时间】:2014-03-16 00:02:04
【问题描述】:

我有一个功能,我想根据我的窗口宽度启用,为移动和 ipad 窗口定制我的菜单......它工作正常,但是当我调整窗口大小时,该功能不会再次触发。 让我解释一下,这是我的功能代码:

if ($(window).width() < 960) {
    $('.button_menu').css("display", "block");
   $('#bloc_menu').hide();
    $('.button_menu').click(function() {     
          $(this).next().slideToggle();
          return false;
    });

}

else {

    $('#bloc_menu').css("display", "block");
    $('.button_menu').css("display", "none");
}

如果窗口宽度小于960,那么我的菜单是隐藏的,广告我有一个按钮出现,当点击按钮时,菜单出现。

如果我的窗口大于 960,则隐藏按钮,并显示我的菜单。

我也有一些 css 规则:

#menu{list-style: none;}
.button_menu{display: none}

@media (max-width: 960px) {
#bloc_menu{margin-top: 10px;position: relative;border-top: 1px solid lightgrey;}

我只想添加一个窗口调整大小监听器,但我找不到解决方案,有人可以帮我吗?

非常感谢您的帮助,

【问题讨论】:

  • $(window).resize(function(){ .... })?

标签: jquery css width listener window-resize


【解决方案1】:

你需要使用jquery的resize函数:

$( window ).resize(function() {


your code...
});

这将在每次调整窗口大小时触发您的代码。

【讨论】:

  • 感谢@RMSTOKES,好的,我找到了解决方案,但是当添加调整大小(功能)时,当点击我的按钮时,我的菜单会在显示之前显示和隐藏 3 或 4 次正确...你知道为什么吗?
【解决方案2】:

为避免在您打开它后隐藏它,请使用一个标志并在您单击按钮时切换它:

  var flag = 0;

  $('.button_menu').click(function() {     
          $(this).next().slideToggle();
          if(flag==0){ 
          flag=1;
          } else {
          flag=0;
          }
          return false;
    });

  $( window ).resize(function() {
    if ($(window).width() < 960) {
    $('.button_menu').css("display", "block");
    if(flag==0){
    $('#bloc_menu').hide();
    }
  }else{
    $('#bloc_menu').css("display", "block");
    $('.button_menu').css("display", "none");
  }
});

【讨论】:

  • 感谢您的回复,但我尝试了您的代码,但它不起作用...这是 ajsfiddle 以查看它的实际效果,按钮图像未显示,因为我在本地工作:@987654321 @再次感谢您的帮助
  • 谢谢,我在$('.button_menu').off().click(function()中添加了'.off',效果很好,非常感谢jsfiddle.net/R46rN/4
  • 不客气,我建议您将点击功能移出调整大小功能jsfiddle.net/R46rN/5 - 它不应该真的在那里。我也更新了上面的代码。
【解决方案3】:
$( window ).resize(function() {

    if($(window).width() < 960) {
        $('.button_menu').css("display", "block");
        $('#bloc_menu').hide();
        $('.button_menu').off().click(function() {     
              $(this).next().slideToggle();
              return false;
        });
    }else{
        $('#bloc_menu').css("display", "block");
        $('.button_menu').css("display", "none");
    }
});

resize 函数可以被多次调用,因此它可以为您的按钮添加许多点击事件侦听器。一旦你点击它就会运行所有这些。

在添加事件侦听器之前放置off() 函数。

【讨论】:

  • 感谢@ordepim,它工作正常,还有一个问题,是否可以在调整大小时保持#bloc_menu 打开?我的意思是当我的窗口小于 960 并且我点击 .button_menu 时,mt #bloc_menu 出现,但如果我调整大小,它就会消失......你明白我的意思吗?谢谢
  • 是的...试试这个: $( window ).resize(function() { if($(window).width()
猜你喜欢
  • 2012-12-15
  • 2012-06-19
  • 1970-01-01
  • 2014-06-24
  • 2015-09-29
  • 2019-07-31
  • 2012-04-21
  • 2015-11-15
  • 2023-03-22
相关资源
最近更新 更多