【问题标题】:SlideToggle has opposite effect on Bootstrap dropdown menuSlideToggle 对 Bootstrap 下拉菜单有相反的效果
【发布时间】:2013-11-09 07:31:29
【问题描述】:

我正在尝试使用 SlideToggle 和 Twitter Bootstrap 以及 jQuery 中的 SlideToggle 方法制作一个下拉导航菜单,但我想要的行为与我想要的完全相反。它应该简单地在悬停时向下滑动,并在鼠标悬停时向上滑动。

HTML

<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
    <div class="container">
        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse navbar-ex1-collapse">
            <ul class="nav navbar-nav">
                <li><a href="#about">Company</a>

                    <ul class="sub-menu">
                        <li><a href="http://sc-arch.com/company/">About Us</a>
                        </li>
                        <li><a href="http://sc-arch.com/media/">Media</a>
                        </li>
                        <li><a href="http://sc-arch.com/brochures/">Brochures</a>
                        </li>
                        <li><a href="http://sc-arch.com/news-events/">News &amp; Events</a>
                        </li>
                    </ul>
                </li>
                <li><a href="#services">Services</a>
                </li>
                <li><a href="#contact">Projects</a>

                    <ul class="sub-menu">
                        <li><a href="http://sc-arch.com/project-category/addition-renovation/">Addition/ Renovation</a>
                        </li>
                        <li><a href="http://sc-arch.com/project-category/civiccommunity/">Civic/Community</a>
                        </li>
                        <li><a href="http://sc-arch.com/project-category/education-collegeuniversity/">Education: College/University</a>
                        </li>
                        <li><a href="http://sc-arch.com/project-category/education-k-12/">Education: K – 12</a>
                        </li>
                        <li><a href="http://sc-arch.com/project-category/historical/">Historical</a>
                        </li>
                        <li><a href="http://sc-arch.com/project-category/in-planning/">In Planning</a>
                        </li>
                        <li><a href="http://sc-arch.com/project-category/interior-architecture/">Interior Architecture</a>
                        </li>
                        <li><a href="http://sc-arch.com/project-category/leed/">LEED</a>
                        </li>
                    </ul>
                </li>
                <li><a href="#about">Clients</a>
                </li>
                <li><a href="#services">Philosophy</a>
                </li>
                <li><a href="#contact">Awards</a>
                </li>
                <li><a href="#contact">Contact</a>
                </li>
            </ul>
        </div>
        <!-- /.navbar-collapse -->
    </div>
    <!-- /.container -->
</nav>

CSS

import url('http://twitter.github.com/bootstrap/assets/css/bootstrap.css');

body {
    margin-top: 60px;
    background-color: #000;
    font-family: Calibri, Arial, sans-serif;
}
.navbar {
    height: 100px;
}
.navbar-inverse {
    background-color: #000;
}
.navbar-brand {
    background-image: url(../assets/logo.png);
    background-repeat: no-repeat;
    width: 188px;
    text-indent: -9999px;
}
.navbar-nav {
    float:right;
}
.navbar-nav > li {
    display: inline-block;
    float: left;
}
.navbar-nav ul {
    display: none;
    position: absolute;
    color: #fff;
    list-style-type: none;
    background-color: rgba(0, 0, 0, 1);
    white-space: nowrap;
}
.navbar-nav li:hover ul {
    display: block;
}
.navbar-nav li ul li a:hover {
    text-decoration: none;
    color: #fff;
}
.navbar-nav a {
    color: #999;
}

jQuery

$('.navbar-nav li').hover(function () {
    $(this).toggleClass('current').find('ul').stop().slideToggle('fast');
});

Fiddle

【问题讨论】:

  • 你应该考虑只使用css。
  • 我想要,但是旧版浏览器(特别是 IE)。
  • 啊,我明白了,好吧,我会检查你的代码,但目前它看起来确实有问题。
  • 评论以保持这个线程活着。

标签: jquery css twitter-bootstrap


【解决方案1】:

我认为你应该删除这个 css

.navbar-nav li:hover ul {
    display: block;
}

它应该可以正常工作;)

它在悬停时像这样工作 css 将 display:block 添加到这个 ul 中,接下来你使用 slideToggle() 方法,它会删除 display:block 这就是它隐藏在悬停时的原因

示例http://jsfiddle.net/tN7KA/

为了安全起见,请使用此脚本:

$('.navbar-nav li').hover(function () {
    $(this).addClass('current').find('ul').slideDown('slow')
        },function() {
            $(this).removeClass('current').find('ul').slideUp();
  });

【讨论】:

  • 如果您删除lis 上的float: left,它似乎也能更好地工作,因为它们已经有display: inline-block;jsfiddle.net/Josh_Powell/tN7KA/1
  • 这行得通!但是,我偶尔会遇到(比如 1/10 次尝试)下拉菜单现在没有完全显示的小故障......
  • 并阅读 setTmieout 以延迟显示下拉菜单和良好的效果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
相关资源
最近更新 更多