滚动固定Div碰撞

时间:2013-03-22 14:26:40

标签: javascript jquery

我正在尝试创建一个页面,顶部有两个固定的div(div1和div2),另一个div(div3),页面内容自然流向下方。当用户滚动并且div3到达div1的底部时,我希望两个div融合在一起并正常滚动。这个website具有我试图复制的确切行为。

我使用不同的z索引将div1和div3保持在div2之上,并在div1和div3触摸时检测到:

$(window).scroll(function(e) {
    var calc = $("#div3").offset().top - $("#div1").height();
    if ($(this).scrollTop() >= calc) 
    {
        //fuse
    }
    else
    {
        //unfuse
    }
});

但我无法弄清楚如何将div3和div1融合在一起。

谢谢:)

1 个答案:

答案 0 :(得分:0)

这是一个解决方案。它依赖于.header内的.content-inner.content.header显示为position:fixed,直到达到滚动阈值,此时将一个类添加到.content.header切换回position:static,以便它返回页面的常规流程。

.content-inner是必要的,因为我们需要减少margin-top以便在.header恢复静态定位时腾出空间。

jsFiddle

<强> HTML

<div class="banner"></div>
<div class="content">
    <div class="header"></div>
    <div class="content-inner">
        ...
    </div>
</div>

<强> CSS

body,
html {
    margin:0;
    padding:0;
}

.banner {
    position:fixed;
    z-index:-1;
    left:0;
    right:0;
    top:100px;
    height:300px;
    background-color:#F00;
}

.content {
    margin-top:400px;
    background-color:#FFF;
    position:relative;
}
.content.fuse {
    margin-top:300px;
}

.content-inner {
    background-color:#FFF;    
}

.header {
    position:fixed;
    height:100px;
    background-color:#00F;
    left:0;
    top:0;
    right:0;
}

.content.fuse .header {
    position:static;
}

<强> JS

$(window).scroll(function(e) {
    if ($(window).scrollTop() < 300)
        $('.content').removeClass('fuse');
    else
        $('.content').addClass('fuse');
});