0

我正在制作一个动画的 Sticky Header。一旦您滚动到某个点以下,标题应该从顶部滑入并保持固定,直到您滚动回该点上方。

这是jsfiddle,如果您删除slideUP上的评论,它可以正常工作。

http://jsfiddle.net/rkr2/Dk8UA/1/

HTML:

<div class="nav-container">
    <div class="nav">
        <div id="bad"> </div>
    </div>
</div>
<p> long content here </p>

CSS:

.f-nav{
     z-index: 9999;
     position: fixed;
     left: 0;
     top: 0;
     width: 100%;
}

#bad{
     width: 100%;
     height: 50px;
     background-color: yellow;
}

JS:

var nav=$('.nav-container');
$(window).scroll(function(){
    if($(this).scrollTop() > 200) {
        nav.addClass('f-nav');
        nav.slideDown('slow');
        $('#bad').css('background-color','red');
    } else {
        nav.removeClass('f-nav');
        //nav.slideUp('slow');
        $('#bad').css('background-color','yellow');
    }
});

为什么会这样?

4

1 回答 1

2

jQuery slideDown 旨在处理隐藏元素。如果元素已经可见,您将看不到效果。要解决此.hide()问题,请在之前添加元素.slideDown。像这样:http: //jsfiddle.net/Dk8UA/3/

添加时它起作用的原因.slideUp是 slideUp 隐藏了元素。

更新: 您可以添加一个 if 条件来检查导航是否已经具有该类以避免每次滚动时都执行动画。

var nav = $('.nav-container');
$(window).scroll(function () {
    if ($(this).scrollTop() > 200) {
        if (!nav.hasClass('f-nav')) {
            nav.addClass("f-nav");
            nav.hide();
            nav.slideDown("slow");
            $('#bad').css('background-color', 'red');
        }
    } else {
        nav.removeClass("f-nav");
        // nav.slideUp("slow");
        $('#bad').css('background-color', 'yellow');
    }
});

http://jsfiddle.net/Dk8UA/13/

于 2013-05-02T16:41:08.367 回答