当切换关闭时,jQuery div不显示

5
我似乎在响应式CSS和JQuery方面遇到了奇怪的问题。
  1. 当窗口大小调整为600px时
  2. 点击hr(图标)显示导航
  3. 当再次点击hr以隐藏导航,然后调整窗口大小时,导航不可见
如果导航可见并且调整大小> 600px,则导航在整个过程中保持可见。
问题是否与jquery代码有关?
代码如下:https://jsfiddle.net/ag3tdeqe/ HTML:
<div class="container">
    <div class="leftmenu">
        <div class="logo">
            <img src="http://callmenick.com/theme/callmenick/img/logo.svg" alt="" />
        </div>
        <div class="icon">
            <hr/>
            <hr/>
            <hr/>
        </div>
        <div class="social"> 
            <span class="fa fa-facebook"></span>
            <span class="fa fa-instagram"></span>
            <span class="fa fa-twitter"></span>
            <span class="fa fa-youtube"></span>
            <span class="fa fa-vine"></span>
            <span class="fa fa-tumblr"></span>
            <span class="fa fa-google-plus"></span>
            <span class="fa fa-linkedin"></span>
        </div>
        <div class="nav">
            <ul class="navigation">
                <li> <a class="scroll" href="#home">Home</a>

                </li>
                <li> <a class="scroll" href="#videos">Videos</a>

                </li>
                <li> <a class="scroll" href="#gallery">Gallery</a>

                </li>
                <li> <a class="scroll" href="#about">About</a>

                </li>
                <li> <a class="scroll" href="#contact">Contact</a>

                </li>
            </ul>
        </div>
    </div>
</div>
</div>

CSS:

html, body {
    margin:0 auto;
    height: 100%;
}
.container {
    margin-left: 250px;
    height: 100%;
}
.leftmenu {
    float:left;
    width:250px;
    margin-left: -250px;
    background-color: #28aadc;
    position: fixed;
    height: 100%;
    overflow: auto;
}
.logo {
    display: block;
    width: 60px;
    text-align: center;
    margin:0 auto;
    margin-top: 30px;
    margin-bottom: 0px;
    height: 60px;
    -webkit-transition: .3s;
    transition: transform .3s;
}
.leftmenu .nav {
    position: relative;
    height: auto;
    padding-bottom: 60px;
    margin-top: -30px;
}
.leftmenu .nav ul {
    height: auto;
    width: auto;
    text-align: center;
}
.leftmenu .nav ul li {
    width: 100%;
}
.leftmenu .nav ul li > a {
    text-align: center;
    margin:0 auto;
    margin-top: 15px;
    width:80%;
    display: block;
    text-decoration: none;
    color:#00648c;
    font-family:'arkhip';
    font-size: 15px;
    padding:5px;
}
.leftmenu .nav ul li > a:hover {
    color:white;
}
@media screen and (max-width:767px) {
    .container {
        margin-left: 0px;
    }
    .leftmenu {
        width: 100%;
        margin-left: 0px;
        float:none;
        position:relative;
        height:80px;
    }
    .leftmenu > h1 {
        font-size: 80%;
    }
    .leftmenu .nav {
        display: block;
        width: 90%;
        padding:0px;
        margin-top: -35px;
        margin-right: 10px;
    }
    .leftmenu .logo {
        margin:0 auto;
        margin-top: 10px;
        margin-left: 20px;
        float:left;
    }
    .leftmenu .nav ul li {
        width:100px;
        display: inline-block;
    }
    .leftmenu .nav ul li > a {
        width:20px;
        margin:0 auto;
    }
}
@media screen and (max-width:600px) {
    .leftmenu {
        max-height: 80px;
        overflow: visible;
        margin-top: -10px;
    }
    .icon {
        display: block;
        width: 30px;
        float: right;
        margin:0 auto;
        padding:5px 10px 5px 10px;
        margin-right: 30px;
        margin-top: 20px;
    }
    .icon hr {
        width:40px;
        border:2px solid white;
        margin:0 auto;
    }
    .icon hr:not(:nth-of-type(1)) {
        margin-top: 10px;
    }
    .icon:hover {
        cursor: pointer;
    }
    .leftmenu .nav {
        display: none;
        position: absolute;
        left:0px;
        right:0px;
        float:none;
        margin:0 auto;
        width: 95%;
        margin-bottom: 10px;
        box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.6);
        top:80px;
        padding-top: 10px;
        background-color: white;
        border-bottom: 1px solid #28aadc;
        border-left: 1px solid #28aadc;
        border-right: 1px solid #28aadc
    }
    .leftmenu .nav ul li {
        display: block;
        margin:0 auto;
    }
    .leftmenu .nav ul li:hover a {
        color:black;
    }
}

JQUERY:

$(".icon").click(function() {
    $(".leftmenu .nav").toggle(); 
});

$(".leftmenu .nav ul li > a").click(function() {
    $(".icon:visible").click();
});

为什么选择器这么长?只需使用 $('.scroll') 即可。 - Ben Kolya Mansley
哦,谢谢 @BenMansley。 - GSoni
@GSoni 看起来它的行为是正常的,也许它的行为不符合你的预期。这是一个响应式下拉菜单,就像 freedomn-2 解释的那样。这是我观察到的:当菜单打开时,无论页面有多宽,我都可以访问链接。你也是这样吗? - zer00ne
啊,我明白了,好的,我会查看一下。 - zer00ne
@freedomn-m - 已编辑!谢谢! - GSoni
显示剩余4条评论
2个回答

3

这条线

$(".leftmenu .nav").toggle();

添加

display: none

在第二次点击图标后,将其隐藏后,将其添加到您的菜单中。

使用以下方法将其删除:

$(window).resize(function() {
  $(".leftmenu .nav").css("display", "");
});

问题解决了!非常感谢!还有一个快速的问题,使用 .css("display", "none").css("display", "") 有什么区别? - GSoni
3
在 jQuery 中,如果将 CSS 属性值设为空,则会移除元素上所有动态添加的样式,并将该属性值恢复为样式表中的值,或者恢复为默认值(在此情况下为块级元素)。请注意,这不会改变原始含义。 - Ben Kolya Mansley
还有一件事,我强烈建议您使用开发者工具(如果您还没有)来定位下次遇到这种棘手问题的根本问题。在Firefox / Chrome / IE上按F12打开它。我个人使用Firefox。 - Fai

2
为了远程触发事件处理程序,您可以使用 trigger() 函数。
例如:$('.icon:visible').trigger('click');

我不明白这是在做什么? - GSoni
调用 .click() 不会触发切换事件处理程序。请查看 http://api.jquery.com/trigger/ - Ben Kolya Mansley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接