jQuery动画过早结束

时间:2011-03-07 18:33:05

标签: javascript jquery css animation jquery-animate

我对jQuery动画有点问题。

我有以下HTML:

<div id="menu">
    <a id="menu-about" href="/">A riguardo...</a><br />
    <a id="menu-ask" href="/">Fammi una domanda</a><br />
    <a id="menu-archive" href="/">Sfoglia l'archivio</a><br />
    <a id="menu-vcard" href="/">La mia vCard</a><br />
    <a id="menu-lifestream" href="/">Il mio lifestream</a><br />
</div>

样式为:

div#menu {
    position: fixed;
    bottom: 0;
    left: 100%;
    padding: 0;
}

div#menu a {
    display: inline-block;
    height: 20px;
    margin: 0 0 10px -42px;
    padding: 6px 0 6px 42px;
    line-height: 20px;
    font: bold 20px "Arial", Helvetica, sans-serif;
    color: #263F51;
    text-shadow: 0 -1px 0 #213441, 0 1px 1px #668EAA;
    text-align: left;
    text-transform: uppercase;
}

div#menu a:hover {
    text-decoration: none;
}

div#menu a#menu-about { background: url(../img/layout/bg-menu-about.png) no-repeat left center; }
div#menu a#menu-ask { background: url(../img/layout/bg-menu-ask.png) no-repeat left center; }
div#menu a#menu-archive { background: url(../img/layout/bg-menu-archive.png) no-repeat left center; }
div#menu a#menu-vcard { background: url(../img/layout/bg-menu-vcard.png) no-repeat left center; }
div#menu a#menu-lifestream { background: url(../img/layout/bg-menu-lifestream.png) no-repeat left center; }

动画如下:

$(function start_menu_effect() {
    $("div#menu a").hover(function (){
        $(this).stop().animate({'marginLeft': '-' + ($(this).width() + 52) + 'px'}, 400);
    },
    function (){
        $(this).stop().animate({'marginLeft': '-42px'}, 400);
    });
});

问题是动画过早结束。动画功能在达到完整边距之前停止。此外,动画可以在菜单返回到原始位置之前完成去悬停并重新悬停鼠标...

编辑 - 问题似乎与宽度有关,这是不正确的。我创造了一个小提琴来演示这个问题: http://jsfiddle.net/cyrusza/fJCyn/

任何提示?

1 个答案:

答案 0 :(得分:1)

喜欢解决方案。

当容器div放置在文档外部时(左:100%),它不像在正常放置中那样展开,因为它没有最右边的边距作为参考。因此,必须设置固定宽度,以使内部元素正常扩展并获得正确的宽度。显然div宽度必须大于内部元素,然后我们需要使用足够的值。

这是div宽度为500px的工作小提琴:http://jsfiddle.net/cyrusza/fJCyn/2/