使用 Waypoints 定位多个固定的粘性元素

Positioning multiple fixed sticky elements with Waypoints

我正在使用 Waypoints and their Sticky 快捷方式将 ID 为 stick-this 的元素 'stick' 滚动到视口顶部后。但是,我在将元素过去 定位到屏幕上的另一个固定元素时遇到了一些困难。

有一个 <div> 和一个 class .header 始终保持固定。我正在尝试将新元素的 top 定位到 .header 元素的 height() 上,以便它们 'stacked' 彼此重叠并且都可见。这是我用来完成此操作的代码:

var sticky = new Waypoint.Sticky({
    element: $('#stick-this')[0],
    handler: function() {
        $(".stuck").css({ "top" : $(".header").height() });
    }
})

所以,从本质上讲,一旦 #stick-this 滚动过去,它就会粘在 position:fixed class 上,而 top 由 [=18 动态确定=] .header.

在我向上滚动之前效果很好,并且 top 样式仍然应用于此元素,尽管 stuck class 不再应用。

所以当我滚动过去时,元素最终变成这样

<div id="stick-this" class="stuck" style="top:70px /*or whatever the height() ends up being */">

当我向上滚动时,元素最终变成这样,顶部 属性 仍然存在

<div id="stick-this" class="" style="top:70px /*I need this back to 0px */">

是否可以在删除 "sticky" 时调用一个函数,以便将内联样式 属性 设置为 top:0px 或类似的样式?

对于其他为此苦苦挣扎的人,我最终在粘性元素的 class 启动时动态写入 CSS 并将其插入头部:

var sticky = new Waypoint.Sticky({
        element: $('#stick-this')[0],
        offset: $('.header').outerHeight(true),
        handler: function(direction) {
            $("<style>")
            .prop("type", "text/css")
            .html("\
            .stuck {\
                position: fixed;\
                top:" + $(".header").height() + "px;\
            }")
            .appendTo("head");
        }
    })

因此,class 将添加正确的 top 定位,一旦 class 被删除,top 属性 是固有的回到 0px

重要的是在该代码的 .html() 部分的每个换行符之后添加 \ 以使其正常工作。