繁体   English   中英

当页面的预定部分出现时,如何使滚动到顶部按钮出现?

[英]How do I make a scroll to top button appear when a pre-determined part of the page appears?

我有一个滚动到顶部按钮,该按钮是通过我从众多示例之一中获得的代码实现的。 效果很好。 我更改了计时功能的外观,以使其不会在100像素后出现,而是在1340之后出现。之所以这样做,是因为右侧有一些框,我不希望按钮出现直到它们被滚动并为空。这样就出现了一个供按钮淡入的空间。时机看起来很完美-我觉得距页面顶部1340像素之后,按钮才出现。

但是,我注意到在另一个(较大的)屏幕上,按钮没有在正确的时间出现,而是在稍后的时间出现。 我意识到(如果我正确收集的话)是1340规格不是页面顶部的绝对像素数,而是从浏览器窗口底部滚动了多少像素。 例如,如果我将浏览器窗口的高度从1000像素调整为400像素并重新加载页面,则按钮将很快出现600像素。

所以我的问题是,是否有办法更改代码,以使按钮仅在页面的某个部分(从窗口顶部开始测量)出现在屏幕上时才出现?

这是我当前正在使用的javascript:

<script type="text/javascript">
    $(document).ready(function () {

        $(window).scroll(function () {
            if ($(this).scrollTop() > 1340) {
                $('#scrollup').fadeIn();
            } else {
                $('#scrollup').fadeOut();
            }
        });

        $('#scrollup').click(function () {
            $("html, body").animate({ scrollTop: 0 }, 500);
            return false;
        });

    });
</script>

谢谢你的帮助。

试试这个-

<script type="text/javascript">
    $(document).ready(function () {
        ToggleScrollUp();

        $(window).scroll(function () {
            ToggleScrollUp();
        });

        $('#scrollup').click(function () {
            $("html, body").animate({ scrollTop: 0 }, 500);
            return false;
        });
    });

    function ToggleScrollUp() {
        if ($(".yourbox").offset().top < $(window).scrollTop() + $(window).height()) {
            $('#scrollup').fadeIn();
        } else {
            $('#scrollup').fadeOut();
        }
    }
</script>

看看这个小提琴: http : //jsfiddle.net/ro39dkaL/2/

您不必使用1340来计算方框底部的位置,而可以实时计算位置,因此它始终可以准确地处理这种情况:

$(document).ready(function () {

var elem   = $('#weblinks');  
var bottom = $(elem).position().top+$(elem).outerHeight(true)

    $(window).scroll(function () {
        if ($(this).scrollTop() > bottom) {
            $('#scrollup').fadeIn();
        } else {
            $('#scrollup').fadeOut();
        }
    });

    $('#scrollup').click(function () {
        $("html, body").animate({ scrollTop: 0 }, 500);
        return false;
    });

});

指定的1340是硬编码的,并非在所有情况下都是准确的。

更好的解决方案是在浏览器窗口中找到元素的高度。

可以使用jquery .offset()。

var offset = $("#child").offset();
var fromTop = offset.top - $(window).scrollTop();

我做了这个小提琴,然后使用了另一种方法:如您所见,我将一个div标识为scroll_toggle 当用户到达该div时(显然您可以删除文本,这只是一个演示)。

这是小提琴: http : //jsfiddle.net/afilini/7633pr0r/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM