javascript - 从页面底部开始,向上滚动,然后粘在顶部的栏

标签 javascript jquery html css

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

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

它会是这样的: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>

最佳答案

我猜是这样的?

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 事件之后重新定位,因此超时。还包括一些调整大小去抖动。对于组合事件,超时时间比单独加载所需的绝对时间要长一些。

在我尝试解决 rockmandew 在评论中提到的重叠内容问题之前,需要一些有关确切文档结构的更多信息。不想在那里浪费时间...或者在脚本编写上做得太过分。

关于javascript - 从页面底部开始,向上滚动,然后粘在顶部的栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32789164/

相关文章:

javascript - jQuery div 或使用输入字段名称

javascript - Wheelnav js将标题与圆圈对齐

javascript - TypeError t.apply 不是函数

javascript - 按键时的 Indesign 脚本 (javascript)

javascript - 关于dom修改

javascript - 提取电子邮件地址但删除一些顶级域名

javascript - 将 Yii 中的下拉列表更改为文本框

javascript - 用 .hoverIntent 替换 MouseOver

css - 继承CSS属性

javascript - JSON/JavaScript 函数问题