如何让固定的“粘性”div留在视口之外

时间:2012-02-21 13:12:00

标签: jquery scroll positioning sticky

我正在尝试遵循本教程:http://jqueryfordesigners.com/fixed-floating-elements/

问题在于,无论何时将固定定位应用于div,如果浏览器宽度发生变化,div将水平移动以适合视口内部。在教程示例http://static.jqueryfordesigners.com/demo/fixedfloat.html中,这不会发生。

这是我的代码(所有内容都位于相对位置的#wrapper中):

CSS:

        #cart {
            position: absolute;
            right: 0;
            width: 270px;
        }

        #target {
            width: 270px;
            height: 200px;

            background-color: blue;
            background-position: 50% 50%;
            background-repeat: no-repeat;

            position: absolute;
            top: 250px;
            right: 0;

            padding: 0;
            border-radius: 15px 15px 0 0 ;
        }

        #drag-here {
            width: 270px;
            height: 0;

            background-image: url(drag-here.png);
            background-repeat: no-repeat;
            display: none;

            position: absolute;
            top: 470px;
            right: 0;
        }

        #cart-list {
            display: none;
            position: absolute;
            top: 430px;
            right: 0;

            list-style-type: none;
        }

        .sticky #target {position: fixed; top: 5px;}
        .sticky #drag-here {position: fixed; top: 225px;}
        .sticky #cart-list {position: fixed; top: 185px;}

HTML:

<section id="cart">
    <div id="target" class="target-listen"></div>
    <div id="drag-here"></div>
    <ul id="cart-list">
    </ul>
</section>

JQuery的:

sticky = false;
initialOffset = $("#target").offset().top - 5;
$(window).scroll(function () {
    if ($(this).scrollTop() >= initialOffset) {
        if (!sticky) {
            $("#cart").addClass("sticky");
            sticky = true;
        } 
    }
    else {
        if (sticky) {
            $("#cart").removeClass("sticky");
            sticky = false;
        }
    }
});

您可以在此处查看我的信息页:http://www.brandcoffee.it/test/brandapart/imagick.php

2 个答案:

答案 0 :(得分:1)

我认为删除right : 0;中的#target应该这样做。

答案 1 :(得分:0)

尝试在width(或百分比)中提供ratio属性,而不是固定像素值。 如:

width:25%; //for #target, and
float:right; //make target float right

width:75%; // for other contents on left side