代码在Safari和响应式浏览器中无法正常工作

时间:2017-08-17 13:30:54

标签: javascript jquery html css safari

我有以下代码,可以在屏幕顶部“显示/隐藏”我的导航,然后再将其关闭。

jQuery(document).ready(function($){
  var didScroll;
  var lastScrollTop = 0;
  var delta = 5;
  var navbarHeight = $('nav').outerHeight(true);

  $(window).scroll(function(event) { didScroll = true; });

  setInterval(function() {
    if (didScroll) {
    hasScrolled();
    didScroll = false;
  }
 }, 0);

function hasScrolled() {
 if($( window ).width() > 768) {
   var st = $(this).scrollTop();
 if (Math.abs(lastScrollTop - st) <= delta)
   return;
 if (st > lastScrollTop) {
    // Scroll Down
        $('#screen-nav').removeClass('nav-down').addClass('nav-up');
   } else { 
        $('#screen-nav').removeClass('nav-up').addClass('nav-down');
   }  

  }
    lastScrollTop = st;
  }

});

CSS

#screen-nav {
  position: fixed;
  top: 0; left: 0; right: 0;
 }

#screen-nav.nav-up { top: -100px; }
#screen-nav.nav-down { top: 0; }

问题是在Safari浏览器上,当屏幕从移动设备大小(在所有浏览器上<768px)更改为屏幕大小时,有时会添加.nav-up类并且导航不会显示。但仅当用户滚动到页面顶部时。

不确定是否有更好的方法来编写代码以确保正常运行。

1 个答案:

答案 0 :(得分:1)

我看到您正在使用this示例。他的小提琴也很好用。唯一的事情是在浏览器上调整大小没有任何关于显示导航到位。您应该可以单独添加它。

$(window).resize(function(){
    $('#screen-nav').removeClass('nav-up').addClass('nav-down')
});

我更新了他的原始fiddle,以反映窗口调整大小处理的添加。