Javascript 如何使元素在滚动时随视口一起滑动?

Javascript 如何使元素在滚动时随视口一起滑动?,javascript,jquery,css,position,Javascript,Jquery,Css,Position,我在谷歌上搜索过这个,但一定是用错了关键词 基本上我想使用Magento和Stack Overflow使用的效果。也就是说,列中有一个元素,当您向下滚动时,它会附着到视口的顶部。一旦再次向上滚动,它将返回到正常的页面流 例如,这是一个很好的提问页面。向下滚动并查看“如何格式化”元素(如果要查看效果,可能需要将视口缩小) 我注意到它正在CSS中设置position:fixed。然而,JavaScript是模糊的 达到这种效果最简单的方法是什么?有jQuery插件可用吗?这里有一篇文章应该有帮助:这

我在谷歌上搜索过这个,但一定是用错了关键词

基本上我想使用Magento和Stack Overflow使用的效果。也就是说,列中有一个元素,当您向下滚动时,它会附着到视口的顶部。一旦再次向上滚动,它将返回到正常的页面流

例如,这是一个很好的提问页面。向下滚动并查看“如何格式化”元素(如果要查看效果,可能需要将视口缩小)

我注意到它正在CSS中设置
position:fixed
。然而,JavaScript是模糊的


达到这种效果最简单的方法是什么?有jQuery插件可用吗?

这里有一篇文章应该有帮助:

这里有一篇文章应该有帮助:

我注意到谷歌在某些地方这样做,比如这里(左侧导航栏)。据我所知,他们检查页面上的位置,然后在页面向下滚动到足以使元素开始从屏幕上滚动时,将项目设置为固定位置

看起来像是另一种方法,使用jQuery设置上边距将允许元素落后并变得不稳定(如果不使用动画),因为javascript必须继续定位元素

下面是Ext中的一个示例,如果我在事件处理程序中没有select,它可能会有很大帮助,但它可以工作

Ext.fly(document).on("scroll", function(e,t,o){
    Ext.select(".pinnable").each(function(el,c,idx){
        var y = window.scrollY;
        if(!el.hasClass("pinned")){
            var ypos = el.getY();
            if(y>ypos){
                el.addClass("pinned");
                el.set({
                    originalY:ypos
                });
            }                   
        } else {
            var origy = el.getAttribute("originalY");
            if(origy && y<origy){
                el.removeClass("pinned")
            }
        }
    });     
});
Ext.fly(document).on(“滚动”),功能(e、t、o){
Ext.select(“.pinnable”)。每个(函数(el、c、idx){
var y=window.scrollY;
如果(!el.hasClass(“固定”)){
var ypos=el.getY();
如果(y>ypos){
el.addClass(“固定”);
el.set({
原文:ypos
});
}                   
}否则{
var origy=el.getAttribute(“原始”);

如果(origy&&y我注意到谷歌在某些地方这样做了,比如这里(左侧导航栏)。从我所知,他们检查页面上的位置,然后在页面向下滚动到足以使元素开始从屏幕上滚动时,将项目设置为固定位置

看起来像是另一种方法,使用jQuery设置上边距将允许元素落后并变得不稳定(如果不使用动画),因为javascript必须继续定位元素

下面是Ext中的一个示例,如果我在事件处理程序中没有select,它可能会有很大帮助,但它可以工作

Ext.fly(document).on("scroll", function(e,t,o){
    Ext.select(".pinnable").each(function(el,c,idx){
        var y = window.scrollY;
        if(!el.hasClass("pinned")){
            var ypos = el.getY();
            if(y>ypos){
                el.addClass("pinned");
                el.set({
                    originalY:ypos
                });
            }                   
        } else {
            var origy = el.getAttribute("originalY");
            if(origy && y<origy){
                el.removeClass("pinned")
            }
        }
    });     
});
Ext.fly(document).on(“滚动”),功能(e、t、o){
Ext.select(“.pinnable”)。每个(函数(el、c、idx){
var y=window.scrollY;
如果(!el.hasClass(“固定”)){
var ypos=el.getY();
如果(y>ypos){
el.addClass(“固定”);
el.set({
原文:ypos
});
}                   
}否则{
var origy=el.getAttribute(“原始”);

如果(origy&&yI以前从来没有注意到如此的行为…我必须闭上眼睛停止使用互联网…=)我以前从来没有注意到如此的行为…我必须闭上眼睛停止使用互联网…=)