【问题标题】:Bar that starts at the bottom of the page, scrolls up and then sticks to the top栏从页面底部开始向上滚动然后停留在顶部
【发布时间】:2015-09-26 05:03:54
【问题描述】:

我正在尝试重现我的想法。它将在那些长滚动页面之一中。

导航栏将从初始屏幕的底部开始。一旦开始向下滚动,它就会以相同的节奏向上滚动,但一旦到达顶部,它就会保持固定。如果您滚动回顶部,它会回到原来的位置。

可能是这样的:http://codepen.io/chrissp26/pen/xEAqC 在您滚动时保持固定在同一个数字标记处,然后一直停留在顶部,除非您向上滚动到该数字。

示例代码:

$(document).on("ready", function() {

  sortTheFooterOut();

});

function sortTheFooterOut() {

  footer = $("#footer");

  $(window).on("scroll", function() {

    if ($(window).scrollTop() > 0) {

      if (!footer.hasClass("fixed")) {
        footer.fadeOut(250, function() {

          footer.addClass("fixed").fadeIn(250);

        });
      }
    } else {
      footer.fadeOut(250, function() {

        footer.removeClass("fixed").fadeIn(250);

      });
    }

  });
}
body {
  font-family: "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif;
}
h1 {
  font-family: "Segoe UI Light", "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif;
  color: #999;
  font-weight: normal;
  margin: 0;
}
footer {
  background: #008aca;
  padding: 10px;
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
}
.fixed {
  position: fixed;
  top: 0;
  bottom: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Footer Scroll</h1>
1
<br>2
<br>3
<br>4
<br>5
<br>6
<br>7
<br>8
<br>9
<br>10
<br>11
<br>12
<br>13
<br>14
<br>15
<br>16
<br>17
<br>18
<br>19
<br>20
<br>21
<br>22
<br>23
<br>24
<br>25
<br>26
<br>27
<br>28
<br>29
<br>30
<br>31
<br>32
<br>33
<br>34
<br>35
<br>36
<br>37
<br>38
<br>39
<br>40
<br>
<footer id="footer">Footer</footer>

【问题讨论】:

  • 究竟是什么不工作?
  • @RikenShah - 我和你在一起...... OP在问什么?好像他用……他自己的问题……回答了他自己的问题……
  • @RikenShah - 一位朋友为我解决了这个问题,显然,他只是想要相反的效果。而不是从顶部开始的菜单,他希望它从底部开始并在您向下滚动时翻转到顶部。
  • @rockmandew 确实,如果不清楚,很抱歉。

标签: javascript jquery html css


【解决方案1】:

我猜是这样的吧?

Demo

$(function() {

var gate = $(window),
footer = $('#footer'),
space;

gate.on('load resize', function() {

    clearTimeout(redraw);

    var redraw = setTimeout(function() {
    space = gate.height()-footer.outerHeight();
    sortTheFooterOut();
    }, 150);
})
.scroll(sortTheFooterOut);

function sortTheFooterOut() {

    var current = gate.scrollTop(),
    stuck = footer.hasClass('fixed');       

    if (current > space) {
    if (!stuck) {
    footer.addClass('fixed');
    }
    }
    else if (stuck) footer.removeClass('fixed');
}
});

添加了一个检查以在用户登陆页面时正确应用该类,并且该页面具有缓存的滚动位置。尤其是 Opera 对此很固执——它在窗口 onload 事件之后重新定位 ,因此会超时。还包括一些调整大小去抖动。对于组合事件,超时时间比 onload 本身绝对必要的时间长一点。

在我尝试解决 rockmanew 在 cmets 中提到的内容重叠问题之前,需要更多关于确切文档结构的信息。不想在那里浪费时间......或者在脚本上过度使用它。

【讨论】:

  • 此解决方案在一定程度上有效 - 虽然您已成功解决问题并提供了适当的响应。我认为这个解决方案并不理想,因为它总是掩盖一些列表项(即我永远看不到 #13 和 #14)。我认为这是不希望的。
  • 我明白你的意思,让我来解决这个问题。需要的另一个调整是检查页面加载以获取缓存的滚动位置并应用适当的类。
  • 对缓存滚动位置的良好调用;我很想知道你如何处理这两个问题 - 主要是缓存的滚动位置:p - 如果你需要一双额外的眼睛,请告诉我。
  • 我想我已经为缓存位置准备了一些代码:stackoverflow.com/a/32670504/3168107。另一个问题似乎有点难以解决,可能需要的不仅仅是脚本......
  • 哇! @Shikkediel 甚至在他们被问到之前就回答了未来的问题:p 干得好,我会看看我是否可以通过一些测试。至于另一个问题,我同意,我认为这比我们希望的要复杂一些。此外,我认为解决方案将取决于开发人员希望它如何运行 - 因为您可以做很多事情。
猜你喜欢
  • 1970-01-01
  • 2015-02-24
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多