2015-12-24 3 views
0

У меня есть панель навигации на странице, которую я хочу придерживаться сверху, когда она достигает определенной точки сверху на настольных устройствах. На мобильных устройствах (менее 780) я хочу, чтобы он всегда играл независимо от того, как далеко прокручивается страница.Mobile vs Desktop Scroll/Resize Issues

Прямо сейчас я столкнулся с проблемой, когда оба события прокрутки/изменения размера окна поддерживают включение и выключение стиля, вызывающего всевозможные хаос. Что было бы хорошим способом перепрофилировать этот код, чтобы он вел себя корректно и плавно менялся при изменении размера браузера?

$(document).ready(function() { 
 
    $(window).scroll(function() { 
 
    var $box = $("#box"); 
 

 
    if ($(window).scrollTop() > 30) { 
 
     $box.addClass("fixed"); 
 
    } 
 

 
    if ($(window).scrollTop() < 30) { 
 
     $box.removeClass("fixed"); 
 
    } 
 

 
    if ($(window).width() > 780) { 
 
     $box.removeClass("fixed"); 
 
    } 
 

 
    if ($(window).width() < 780) { 
 
     $box.addClass("fixed"); 
 
    } 
 
    }); 
 

 
});
#box { 
 
    width: 100%; 
 
    background-color: red; 
 
} 
 

 
.fixed { 
 
    position: fixed; 
 
    top: 0; 
 
}
<div id="box"> 
 
    This is the nav 
 
</div> 
 

 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p> 
 
<p> 
 
    Content 
 
</p>

ответ

1

Проверка по ширине окна, а затем только если его рабочий стол, проверьте scrollTop.

на основе OPS комментарий, это теперь работает на resize и scroll

$(document).ready(function() { 

    function headerFunction(){ 
     var $box = $("#box"); 

     if ($(window).width() < 780) { 
      $box.addClass("fixed"); 
     } else { // window is larger than 780 
      if ($(window).scrollTop() > 30) { 
       $box.addClass("fixed"); 
      } else { 
       $box.removeClass("fixed"); 
      } 
     } 
    } 

    $(window).scroll(function() { 
     headerFunction(); 
    }); 
    $(window).resize(function(){ 
     headerFunction(); 
    }); 
}); 
+0

Единственная проблема у меня, кажется, с ним теперь, что если я в верхней части страницы на рабочем столе устройства и затем сжимайте страницу вниз, для этого требуется подталкивать свиток. –

+0

Исправлено, добавив еще один прослушиватель событий при изменении размера, который добавляет его в дополнение к тому, что вы разместили. Благодаря! –

+1

Я обновил ответ, чтобы добавить прослушиватель событий изменения размера – Bradley4

Смежные вопросы