当用户滑动到页面底部时如何显示div?

9
当用户滚动到页面底部时,我想使用jQuery显示某些div。如果用户向顶部滚动,则淡出div。那么如何计算视口(或者正确的名称是什么):)
谢谢

你是在说一个具有position:fixed;属性的div,还是一个仅位于内容底部的div? - codedude
它将固定在页面底部,可能是“bottom:50px”。 - Kenan
4个回答

14

这将帮助你入门:

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2768264</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $(window).scroll(function() {
                    if ($('body').height() <= ($(window).height() + $(window).scrollTop())) {
                        alert('Bottom reached!');
                    }
                });
            });    
        </script>
        <style>
            body { margin: 0; }
        </style>
    </head>
    <body>
        <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p
        <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p
        <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p
        <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p
    </body>
</html>

这里假设 bodymargin 设为 0。否则,你需要将上下 margin 添加到 $('body').height() 中。


是的,边距为0,我正在使用CSS重置。而且我正在使用jQuery 1.3.2? - Kenan
嗯,你说得对,在Firefox中它不起作用(此处的Editplus带有IE7作为内置浏览器)。在Firefox中,视口实际上更高。我会调查一下是否应该这样。更新:有趣的是,在Firefox中不支持body.onscroll - BalusC
我将 body.onscroll 替换成了 window.onscroll 并且将 == 替换成了 <= - BalusC
太棒了!从这段代码中,我们可以开发出类似于Facebook或Twitter的东西。太棒了!太棒了 :) - user621639
2
你最好使用 $(document).height() 而不是 $('body').height()。在我的设计中,body 返回了错误的高度。 - Sven van Zoelen
显示剩余4条评论

8
您可以使用以下内容:
$(window).scroll(function() {
    if ($(document).height() <= ($(window).height() + $(window).scrollTop())) {
        //Bottom Reached
    }
});

我使用这个是因为我需要

body {
    height:100%;
}

希望这能有所帮助。

谢谢,我正好处于同样的情况。你的解决方案对我很有帮助! - Adrien
@Adrien 朋友,不用谢。很高兴我能帮到你 :) - David Passmore

3

如果您想显示一个div而不是JavaScript弹出窗口,这里对BalusC的代码进行了小修改:

<head>
    <title>SO question 2768264</title>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script>
        $(document).ready(function() {
            $(window).scroll(function() {
                if ($("body").height() <= ($(window).height() + $(window).scrollTop())) {
                    $("#hi").css("display","block");
                }else {
                    $("#hi").css("display","none");
                }
            });
        });
    </script>
    <style>
        body { margin: 0; }
        #hi {
          background: red; color: #FFF; position: fixed; bottom: 0px; right: 0px; display: none;
        }


    </style>
</head>
<body>
    <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p
    <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p
    <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p
    <p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p<p>p

    <div id="hi">HIIIIIIIIIIII</div>
</body>

嗨。假设我使用的是div ID而不是“body”,如果我想让“hi”在滚动div的80%处出现,该怎么办? :) 点赞会支付一个好答案 :) - user621639

2

$(document).scrollTop()可以获得滚动条的位置。您可以将其与文档高度进行比较,然后淡入或淡出div。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接