滚动到该div后如何使div固定?

时间:2013-04-06 11:20:37

标签: javascript html css scroll css-position

滚动到div后,如何使div保持固定状态?我有一个div稍后在页面中,您需要滚动才能转到div

如果我使用:

.divname {
  position: fixed;
}

div会在正常显示之前出现。也许我需要的一个很好的例子就是9gag上的第二个广告。如果您的屏幕分辨率足够低,则在加载首页后您将看不到该广告,但在向下滚动后,您会看到第二个广告,并在向下滚动时保持不变。

6 个答案:

答案 0 :(得分:96)

我知道这只是标记为html / css,但你不能只使用css。最简单的方法是使用一些jQuery。

var fixmeTop = $('.fixme').offset().top;       // get initial position of the element

$(window).scroll(function() {                  // assign scroll event listener

    var currentScroll = $(window).scrollTop(); // get current position

    if (currentScroll >= fixmeTop) {           // apply position: fixed if you
        $('.fixme').css({                      // scroll to that element or below it
            position: 'fixed',
            top: '0',
            left: '0'
        });
    } else {                                   // apply position: static
        $('.fixme').css({                      // if you scroll above it
            position: 'static'
        });
    }

});

http://jsfiddle.net/5n5MA/2/

答案 1 :(得分:7)

CSS3可以做到这一点。只需使用position: sticky,就像here一样。

position: -webkit-sticky; /* Safari & IE */
position: sticky;
top: 0;

答案 2 :(得分:4)

jquery函数是最重要的

<script>
$(function(){
    var stickyHeaderTop = $('#stickytypeheader').offset().top;

    $(window).scroll(function(){
            if( $(window).scrollTop() > stickyHeaderTop ) {
                    $('#stickytypeheader').css({position: 'fixed', top: '0px'});
                    $('#sticky').css('display', 'block');
            } else {
                    $('#stickytypeheader').css({position: 'static', top: '0px'});
                    $('#sticky').css('display', 'none');
            }
    });
});
</script>

然后使用JQuery Lib ...

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

现在使用HTML

<div id="header">
    <p>This text is non sticky</p>
    <p>This text is non sticky</p>
    <p>This text is non sticky</p>
    <p>This text is non sticky</p>
 </div>

<div id="stickytypeheader">
 <table width="100%">
  <tr>
    <td><a href="http://growthpages.com/">Growth pages</a></td>

    <td><a href="http://google.com/">Google</a></td>

    <td><a href="http://yahoo.com/">Yahoo</a></td>

    <td><a href="http://www.bing.com/">Bing</a></td>

    <td><a href="#">Visitor</a></td>
  </tr>
 </table>
</div>

<div id="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.</p>
</div>

检查DEMO HERE

答案 3 :(得分:1)

它对我有用

$(document).scroll(function() {
    var y = $(document).scrollTop(), //get page y value 
        header = $("#myarea"); // your div id
    if(y >= 400)  {
        header.css({position: "fixed", "top" : "0", "left" : "0"});
    } else {
        header.css("position", "static");
    }
});

答案 4 :(得分:1)

<script>
if($(window).width() >= 1200){
    (function($) {
        var element = $('.to_move_content'),
            originalY = element.offset().top;

        // Space between element and top of screen (when scrolling)
        var topMargin = 10;

        // Should probably be set in CSS; but here just for emphasis
        element.css('position', 'relative');

        $(window).on('scroll', function(event) {
            var scrollTop = $(window).scrollTop();

            element.stop(false, false).animate({
                top: scrollTop < originalY
                    ? 0
                    : scrollTop - originalY + topMargin
            }, 0);
        });
    })(jQuery);
}

试试这个!只需将.to_move_content类添加到div

答案 5 :(得分:0)

添加到@Alexandre Aimbiré的答案-有时您可能需要指定z-index:1才能使元素在滚动时始终位于顶部。 像这样:

position: -webkit-sticky; /* Safari & IE */
position: sticky;
top: 0;
z-index: 1;