【问题标题】:jquery div doesn't show when toggle is closed关闭切换时jQuery div不显示
【发布时间】:2017-07-29 22:15:27
【问题描述】:

我似乎对响应式 CSS 和 JQuery 有一个奇怪的问题

  1. 当窗口大小调整为 600 像素时
  2. 点击小时(图标)以显示导航
  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;
    }
}

查询:

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

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

【问题讨论】:

  • 为什么选择器这么长?只需使用$('.scroll')
  • 哦,谢谢@BenMansley
  • @freedomn-m - 解决此问题的最佳方法是什么?
  • @GSoni 它看起来像它应该的行为,也许它的行为不像你预期的那样。正如 Freedomn-2 所解释的,这是一个响应式下拉菜单。这是我观察到的:当菜单打开时,无论页面多宽,我都可以访问链接。你也一样吗?
  • @zer00ne - 我遇到的问题是当页面小于 600px 时,图标显示,当点击它然后点击隐藏导航,然后调整页面大小 - 导航不出现

标签: javascript jquery html css


【解决方案1】:

线

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

添加

display: none

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

使用以下方法将其删除:

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

【讨论】:

  • 解决了问题!非常感谢!快速提问,做 .css("display", "none") 和 .css("display", "") 有什么区别
  • jquery 中的空 css 值会删除所有动态添加到元素的样式,将值恢复为样式表上的值或默认值(在这种情况下为块)
  • 还有一点,我强烈建议您下次遇到此类棘手问题时,使用开发人员工具(如果您没有的话)来定位潜在问题。在 Firefox/Chrome/IE 上按 F12 将其打开。我个人使用 Firefox。
【解决方案2】:

要远程触发事件处理程序,请使用trigger()

$('.icon:visible').trigger('click');

【讨论】:

  • 我不明白这是在做什么?
  • 调用 .click() 不会触发切换它的事件处理程序。看看api.jquery.com/trigger
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多