【问题标题】:Float a div at the bottom right corner, but not inside footer在右下角浮动一个 div,但不在页脚内
【发布时间】:2013-08-29 14:40:18
【问题描述】:

我正在尝试实现一个浮动在页面右下角的“转到顶部”按钮。我可以使用以下代码执行此操作,但我不希望此按钮进入页面的页脚。当用户将页面向下滚动到页面底部时,如何阻止它进入页脚并保持在其顶部?

CSS

#to-top {
  position: fixed;
  bottom: 10px;
  right: 10px;
  width: 100px;
  padding: 5px;
  border: 1px solid #ccc;
  background: #f7f7f7;
  color: #333;
  text-align: center;
  cursor: pointer;
  display: none;
}

JavaScript

$(window).scroll(function() {
  if($(this).scrollTop() != 0) {
    $('#to-top').fadeIn(); 
  } else {
    $('#to-top').fadeOut();
  }
});

$('#to-top').click(function() {
  $('body,html').animate({scrollTop:0},"fast");
});

HTML

<div id="to-top">Back to Top</div>

编辑 这是一张它应该是什么样子的图。黑色的垂直矩形是一个滚动条。 “返回顶部”按钮不应该进入页脚区域。

这是jsfiddle

【问题讨论】:

  • 请查看jsfiddle.net/praveenscience/BhvMg 并说是否解决了。
  • @PraveenKumar 关闭,但不完全。 :( 但是谢谢你帮助我。请看我的 cmets 和解决方案。

标签: javascript jquery css


【解决方案1】:

解决方案比我想象的要复杂。这是我的解决方案。

它使用这个function 来检查页脚是否在屏幕上可见。如果是,它将带有position: absolute 的按钮定位在一个div 中。否则,它使用position: fixed

function isVisible(elment) {
    var vpH = $(window).height(), // Viewport Height
        st = $(window).scrollTop(), // Scroll Top
        y = $(elment).offset().top;

    return y <= (vpH + st);
}

$(window).scroll(function() {
    if($(this).scrollTop() == 0) {
        $('#to-top').fadeOut();
    } else if (isVisible($('footer'))) {
        $('#to-top').css('position','absolute');
    } else {
        $('#to-top').css('position','fixed');
        $('#to-top').fadeIn();
    }
});

jsfiddle

【讨论】:

    【解决方案2】:

    bottom: 10px; 的值增加到页脚的高度。 我现在看到了您的屏幕截图,只需添加一些 padding-bottom 即可。

    【讨论】:

    • ...或absolute 将其定位在您的内容元素中,前提是已经具有相对定位。
    • 嗨@Sharath,我有点困惑。我在哪里添加padding-bottom,它的价值是什么?
    • 将其添加到“返回顶部”按钮
    • 这仍然不能解决问题。正如我在下面的评论中所说,如果我增加bottom 的值,当页脚在屏幕上不可见时,它不会粘在页面的右下角。此外,更改 padding-bottom 的值并没有改变任何东西。我在这里错过了什么吗?
    • @CookieMonster 问题在于position: fixed; 将其排除在流程之外。然后它不知道其他元素在哪里。
    【解决方案3】:

    解决方案

    $(document).ready(function(){
        $(window).scroll(function(){
            btnBottom = $(".btt").offset().top + $(".btt").outerHeight();
            ftrTop = $(".footer").offset().top;
            if (btnBottom > ftrTop)
                $(".btt").css("bottom", btnBottom - ftrTop + $(".btt").outerHeight());
        });
    });
    

    小提琴:http://jsfiddle.net/praveenscience/BhvMg/


    你忘了给z-index,这会阻止它在上面!

    z-index: 999;
    

    或者如果它与你的页脚重叠,你可以增加坐标。

    bottom: 50px;
    

    您的问题仍然不清楚,“阻止它进入页脚”。有重叠吗?

    【讨论】:

    • 谢谢,但如果我将 bottom 的值增加到 50(或其他值),它始终保持在右下角上方 50px 处。那不是我想要的。我希望通常停留在底部右角(即底部:10px,右侧:10px),但当用户向下滚动到页面末尾时,它应该停留在页脚的顶部。
    • @CookieMonster 一个截图,也许对更好的理解会有帮助。 :)
    • @CookieMonster 好的,我现在有你的问题。正在研究解决方案。
    • 谢谢,@PraveenKumar!但不幸的是,这并不完全奏效。例如,如果您向下滚动到末尾并再次向上滚动,则该按钮现在停留在错误的位置。如果您还增加页脚的高度,它根本不起作用。我认为解决方案并不太复杂。我也会尝试自己解决问题。
    • 我在这里发布了一个对我有用的解决方案 - stackoverflow.com/questions/8653025/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2016-05-27
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多