0

如何实现一个侧边栏,它位于页面的某个位置,当用户向下滚动页面时,它会改变位置并随着主要内容滚动,始终保持可见?

这是一个例子 (请向下滚动)


哦亲爱的!我只需要指定以下样式(这对我来说不太明显):

.affix {
    position: fixed;
}

当然,要添加 jQuery:

$('.leftnav').affix();

非常感谢所有试图帮助我的人!

4

4 回答 4

1

检查您链接到的页面的来源。该解决方案涉及在用户向下滚动时更改为固定位置,刚好足以使菜单的顶部边缘到达屏幕的顶部边缘(这是通过监听scroll事件来完成的)。最初(提供页面时)菜单没有固定位置。

编辑:或者更好...这里的脚本可以做到这一点http://twitter.github.com/bootstrap/javascript.html#affix ;)

于 2012-08-23T12:19:29.150 回答
1

尝试position: fixed

http://jsfiddle.net/FlameTrap/mfyAc/

**编辑**

试试这个:

http://jsfiddle.net/FlameTrap/Wqb3g/1/

于 2012-08-23T12:22:55.187 回答
0

您需要监听每个滚动事件,并在滚动时更改元素的位置,或者更改为fixed阈值之后,或者不断更新:

var newPos = Math.max( startPosition, scrollTop + scrollOffset)
于 2012-08-23T12:19:33.377 回答
0

你看起来像这样吗

看演示

JS代码:

        var ns = (navigator.appName.indexOf("Netscape") != -1);
        var d = document;
        function JSFX_FloatDiv(id, sx, sy)
        {
            var el=d.getElementById?d.getElementById(id):d.all?d.all[id]:d.layers[id];
            var px = document.layers ? "" : "px";
            window[id + "_obj"] = el;
            if(d.layers)el.style=el;
            el.cx = el.sx = sx;el.cy = el.sy = sy;
            el.sP=function(x,y){this.style.left=x+px;this.style.top=y+px;};
        
            el.floatIt=function()
            {
                var pX, pY;
                pX = (this.sx >= 0) ? 0 : ns ? innerWidth : 
                document.documentElement && document.documentElement.clientWidth ? 
                document.documentElement.clientWidth : document.body.clientWidth;
                pY = ns ? pageYOffset : document.documentElement && document.documentElement.scrollTop ? 
                document.documentElement.scrollTop : document.body.scrollTop;
                if(this.sy<0) 
                pY += ns ? innerHeight : document.documentElement && document.documentElement.clientHeight ? 
                document.documentElement.clientHeight : document.body.clientHeight;
                this.cx += (pX + this.sx - this.cx)/8;this.cy += (pY + this.sy - this.cy)/8;
                this.sP(this.cx, this.cy);
                setTimeout(this.id + "_obj.floatIt()", 40);
            }
            return el;
        }

HTML:

<div id="main">
    <div id="divTopLeft" style="position:absolute">
        <script>JSFX_FloatDiv("divTopLeft", 10,30).floatIt();</script>
        <ul>
            <li id="img1">Image 1</li>
            <li id="img2">Image 2</li>
            <li id="img3">Image 3</li>
            <li id="img4">Image 4</li>
        </ul>
    </div>
</div>

CSS:

    #main {
        width: 1280px;
        height:720px;
        background: url(http://www.designworks.com.pk/example/background/images/1.jpg) left top no-repeat;
        margin: 0;
        position:relative;
        z-index:2;
    }
    ul { margin:20px; display:inline-block; }
    ul li { cursor:pointer; list-style-type: none; color: #fff; background:#000; border:1px solid #fff; font-size:16px; font-weight: bold; padding: 5px; margin:2px 0 0 0;  }
    ul li#img1 { background:#F90; }
   
于 2012-08-23T12:22:54.343 回答