【问题标题】:Animate dropdown with jQuery使用 jQuery 动画下拉菜单
【发布时间】:2014-08-17 12:34:54
【问题描述】:

我想为我的顶部导航设置动画。

目前下拉次只是跳下悬停顶部导航链接。

开发网站:http://goandco.w7.ext.starberry.com

我尝试了以下方法:

<script>
jQuery(document).ready(function() {
    jQuery( '.has-drop-down-a' ).hover(
        function(){
            jQuery(this).children('.drop').slideDown(200);
        },
        function(){
            jQuery(this).children('.drop').slideUp(200);
        }
    );
});
</script>

我的html类似如下:

<ul id="nav">
   <li class="has-drop-down">
     <a href="#" class="has-drop-down-a">Search</a>
       <div class="drop">...</div>
   </li>
</ul>

我需要class=“drop”div以动画向下,而不是瞬间。

编辑:

所以,以下是有效的 - 除了两件事: 1)您必须将鼠标悬停在链接上一次,然后它就会起作用。 2)当您将鼠标向下移动到放置 div 上时,它会折叠

 <script>
        jQuery('body').ready(function() {
            jQuery( '.has-drop-down-a' ).hover(
                function(){
                    jQuery(this).siblings('.drop').slideDown(400);
                },
                function(){
                    jQuery(this).siblings('.drop').slideUp(400);
                }
            );
        });
        </script>

【问题讨论】:

  • 把相关代码放在一个jsFiddle中。不要将链接放到可能在未来反映问题的外部网站。 span>
  • 上面的网站链接确实反映了这个问题! span>
  • 使用.siblings()而不是.children()。 span>
  • 它反映了现在,也许将来其他用户会检查此问题以进一步参考类似问题。
  • 此版本中的建议书。 span>

标签: jquery html css jquery-animate


【解决方案1】:

如果您查看http://api.jquery.com/slidedown/ 的网站文档 在 1.4.3 版本中,您可以向函数添加更多内容。而不是:

jQuery(this).children('.drop').slideDown(200);

您可以添加更多变量:

jQuery(this).children('.drop').slideDown( [duration ] [, easing ] [, complete ] )

【讨论】:

  • 所以请看我上面编辑的帖子...工作,但有 2 个问题
【解决方案2】:

我在您的代码中看到的唯一问题是不要在“a”中包含“div drop”。

以下应该有效:

<ul id="nav">
    <li class="has-drop-down">
        <a href="#" class="has-drop-down-a">Search
            <div class="drop">...</div>
        </a>
    </li>
</ul>

小提琴:http://jsfiddle.net/61ewuhea/

编辑:

关于这两个问题:

1)你必须将drop的初始状态设置为折叠,要做到这一点,添加

$('.drop').slideUp(0);

到文档准备函数。

2) 要解决这个问题,我强烈建议您听从我的建议,将 'div' 放在 'a' 内,并使用孩子而不是兄弟姐妹。

为什么?因为,与您提供的网站不同,您需要动画,因此,您应该尝试仅“动画”一个对象。这就是它崩溃的原因,你说的是“当我悬停'a'而不是'div'时动画”。

当您将 div 放在 INSIDE 内时,它不再折叠,因为它是同一个元素。

在做 jsFiddle 时出现的另一个问题是,您需要一个“桥”将“a”元素连接到“div”来执行此操作,我只是在 .drop 类中添加了一些 css 规则。

这里是完整的 javascript 代码:

jQuery('body').ready(function () {
    $('.drop').slideUp(0);

    jQuery('.has-drop-down-a').hover(
        function () {
            jQuery(this).children('.drop').slideDown(200);
        },

        function () {
            jQuery(this).children('.drop').slideUp(200);
        }
    );
});

这是 HTML:

<ul id="nav">
    <li class="has-drop-down"> <a href="#" class="has-drop-down-a">
            Search
            <div class="drop">...</div>
        </a>

    </li>
</ul>

这是 CSS:

.drop {
    background-color:#f00;
    position:relative;
    top:-1px;
}

您可以在这里测试 jsFiddle:http://jsfiddle.net/61ewuhea/1/

我希望这能正确回答您的问题。

【讨论】:

  • 谢谢...有点工作,但在我上面的编辑中有两个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2019-06-24
相关资源
最近更新 更多