【问题标题】:Hide a div until scrolled to the bottom of the page隐藏 div 直到滚动到页面底部
【发布时间】:2018-10-02 04:00:45
【问题描述】:

我正在制作一个网页(有点像那些音乐发布页面,here 就是一个例子),我希望在用户滚动到页面底部之前不显示底部的某些 div ,延迟一两秒,然后弹出。有点像隐藏功能的东西。 你也可以把它想象成一个无限滚动,就像当你在顶部拖动你的 Instagram 提要时,它会刷新它,并出现新的帖子。这就是我正在寻找的用户体验,只是在我的情况下它是一个“有限滚动”,默认情况下隐藏了一些 div。

我目前有两种实现方式,都没有完全达到预期的体验。两者都使用jQuery Slim。
在这两种实现中,#hidden 是我默认隐藏的 div 的 id,它在 div 标签上有 style="display: none;" 内联。

第一个看起来像这样:

$(window).scroll(function() {
var x = $(document).height() - $(window).height() - 20;
if( $(window).scrollTop() > x ) {
  $("#hidden").delay(1000).show(0);
}
else {
  $("#hidden").hide(0);
}
});

这个问题是当 div 出现时它会改变文档高度,所以当你到达页面底部时它会闪烁(由于重新计算文档高度),有时会回到原来的状态隐。用户体验真的很差。

第二个看起来像这样:

$(window).scroll(function() {
if( $(window).scrollTop() > 75 ) {
  $("#hidden").delay(1000).show(0);
}
else {
  $("#hidden").hide(0);
}
});

这个解决了闪烁问题,完全保持阈值不变,用户体验稍微好一点,但不是很灵活,如果我的页面变长,我必须为 div 设置一个新的阈值才能显示向上。

在上述两种解决方案中,delay(1000) 都不起作用。一旦页面滚动到底部,div 就会出现。

这个设计有可能实现吗?

【问题讨论】:

    标签: javascript jquery html scroll hide


    【解决方案1】:

    你可以试试这个代码:

    $(window).on("scroll", function() {
        var scrollHeight = $(document).height();
        var scrollPosition = $(window).height() + $(window).scrollTop();
        if ((scrollHeight - scrollPosition) / scrollHeight === 0) {
            $("#hidden").delay(1000).show(0);
        }
    });
    

    【讨论】:

    • 感谢滚动部分效果惊人!但是,延迟仍然不起作用。 div 立即出现。
    • @Samm 延迟不适用于 show()。尝试使用淡入淡出
    • 这是否意味着我必须使用完整的 jQuery?我真的反对在这样的简单页面上使用整个库。还有其他解决方法吗?
    • @Samm 你也可以给选中的元素(id 或类)添加一个类$( "#yourid" ).addClass( "myClass yourClass" );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多