【问题标题】:jQuery Toggle does not show on window resizejQuery Toggle 不会在窗口调整大小时显示
【发布时间】:2013-09-24 08:49:05
【问题描述】:

我正在使用 jQuery slideToggle 函数和媒体查询。

问题是当我将窗口调整为小尺寸时,会出现切换链接。现在,如果我点击切换,它可以正常工作,但是当我将窗口调整回大尺寸时,隐藏的元素仍然没有出现。

如果我不点击切换链接,然后将窗口重新调整为大尺寸,它可以正常工作。

Demo看问题:

请在此处查看演示,您可以在其中看到问题: http://jsfiddle.net/3Jj7J/

将窗口大小调整为您看到“主菜单”链接的小尺寸。当您单击它时,您将看到切换。现在如果你把它改回大尺寸,正常的链接仍然不会出现。

这是我的代码:

HTML:

<div class="bar">
    <a class="toggle" href="#">MAIN MENU</a>
</div>

<div class="nav">
    <div class="wrap">
        <ul>
            <li>Link 1</li>
             <li>Link 2</li>
        </ul>
    </div>
</div>

CSS:

.bar{
    display: none;
    border: 1px solid red;
}

@media screen and (max-width: 500px) {
     .nav ul { 
        display: none;
    }

    .bar{
        display: block;        
    }
}

jQuery:

var menu = jQuery('.nav .wrap > ul');       
jQuery(".toggle").click(function() {
    menu.slideToggle(500);
});

【问题讨论】:

  • 问题显然是,jQuery 添加的内联样式覆盖了你的 CSS 规则。如果元素被隐藏并且屏幕的宽度超过 500 像素,您可以监听调整大小事件并强制进行新的切换。
  • 你能举个例子吗?

标签: javascript jquery html css media-queries


【解决方案1】:

添加窗口调整大小事件处理程序:

var menu = jQuery('.nav .wrap > ul');       
jQuery(".toggle").click(function() {
    menu.slideToggle(500);
});  

jQuery(window).on('resize', function(){   
    if(!jQuery(".toggle").is(":visible") && !menu.is(':visible'))
    {
         menu.show();   
    }
});  

jsFiddle:http://jsfiddle.net/3Jj7J/1/

更新:这是替代解决方案(只需删除内联 display 属性,因此它将使用 css 规则)。

jQuery(window).on('resize', function(){     
    if(!jQuery(".toggle").is(":visible") && !menu.is(':visible'))
    {
        menu.css({'display':''});   
    }
});  

DEMO

【讨论】:

  • 注意:这将在窗口宽度超过 500 像素的每个调整大小事件上调用 menu.show()see
  • ".toggle" 被隐藏时,这个想法会显示menu。编辑了我的答案,所以 menu.show() 只有在 menu 被隐藏时才调用。
  • 非常感谢。但是在您的示例中,单击“主菜单”链接,它会向下切换。现在将窗口调整为大尺寸,然后再调整回小尺寸。切换项目不再隐藏。你知道如何解决吗?
  • @dann 非常感谢,但这似乎没有任何区别。点击小号菜单链接,增大窗口再减小窗口,默认会看到菜单项。我想让它们默认隐藏,并且只想在单击链接时显示。再次感谢,非常感谢您的帮助。
  • @user2738640,删除&amp;&amp; !menu.is(':visible'),这样就可以了。但正如 insertusernamehere 所建议的那样,menu.css({'display':''}); 将在窗口宽度超过 500 像素的每个调整大小事件中被调用。
【解决方案2】:

我已经阅读了您的问题并自己进行了测试。现在,我通过执行以下操作使链接出现:

CSS:

        #bar {
        display: none;
        color: #000000;
        border: 1px solid red;
    }

    @media screen and (max-width: 500px) {
         #nav ul { 
            display: none;
        }

        .bar{
            display: block;        


   }
}

亲眼看看 (http://jsfiddle.net/hSZ7t/) 我所做的是更改了您的 CSS。而不是你使用:

.bar {

现在是:

#bar {

【讨论】:

  • 感谢您的回答,但我确定您没有理解这个问题。将类更改为 ID 或更改字体颜色有什么帮助?
  • @user2738640 好的,我刚刚编辑了答案。类不需要改变。我刚刚更改了 CSS。现在,应该会出现“MAIN MENU”这句话。
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2012-07-24
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
相关资源
最近更新 更多