是什么导致Safari中的这种行为?

时间:2017-05-09 13:53:05

标签: javascript html css twitter-bootstrap-3 safari

尝试使用Chrome和Safari浏览器来查看问题。

以下是笔:http://codepen.io/anon/pen/jmYJaJ#anon-login

向下滚动页面时,导航栏应隐藏,然后如果向上滚动,则应显示。它在Chrome中正常运行

铬: Chrome

Safari中: enter image description here

我正在使用的JS是

var scroll = $(document).scrollTop();
var headerHeight = $('.navbar-default').outerHeight();
$(window).scroll(function() {
    var scrolled = $(document).scrollTop();
    if (scrolled > scroll) {
        $('.navbar-default').addClass('nav-up');
    } else {
        $('.navbar-default').removeClass('nav-up');
    } 
    if (scrolled > headerHeight) {
            $('.navbar-default').addClass('nav-white');
        } else {
            $('.navbar-default').removeClass('nav-white');
        }

    scroll = $(document).scrollTop();
});

我该如何解决这个问题?为什么会这样?

1 个答案:

答案 0 :(得分:0)

在jQuery窗口高度方面,safari和其他浏览器存在差异。

将JS更改为:

var scroll = $(document).scrollTop();
var headerHeight = $('.navbar-default').outerHeight();
$(window).scroll(function() {
  var scrolled = $(document).scrollTop();
  if (scrolled > scroll) {
    $('.navbar-default').addClass('nav-up');
  } else {
    $('.navbar-default').removeClass('nav-up');
  } 
  if (scrolled > headerHeight) {
    $('.navbar-default').addClass('nav-white');
  } else {
        $('.navbar-default').removeClass('nav-white');
  }

  scroll = $(document).scrollTop() + window.innerHeight == $(document).height();
});

这里唯一改变的就是这一行,计算偏移以适应window.innerHeight,即:

scroll = $(document).scrollTop() + window.innerHeight == $(document).height();

CodePen: https://codepen.io/anon/pen/pPpBrb