2016-11-23 19 views
0

У меня есть панель навигации, которая фиксируется в верхней части экрана после того, как она прокручивает 160 пикселей. Я также использую гладкую прокрутку для привязных ссылок, которая отлично работает, если панель навигации уже установлена ​​в верхней части экрана, однако, если навигационная панель находится в незафиксированном состоянии до прокрутки до 160 пикселей, тогда прокрутка якоря не принимает учтите буфер 40px, который я добавил.Прокрутите до привязки с фиксированной навигационной панелью, навигационные исправления после прокрутки слишком

Я хочу, чтобы гладкая прокрутка прокручивалась до якоря точно -40px, зафиксирована ли панель навигации или нет.

Два много кода я использую следующие:

1) Smooth Scroll

jQuery(document).ready(function($) { 
    $('a[href*="#"]:not([href="#"])').click(function() { 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
     var target = $(this.hash); 
     target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
     if (target.length) { 
     $('html, body').animate({ 
      scrollTop: target.offset().top - 40 
     }, 750); 
     return false; 
     } 
    } 
    }); 
}); 

2) Fixed Nav Bar

jQuery(document).ready(function($){ 
    $(function() { 
     $(window).resize(function() { 
     // responsive nav primary fixed 
     if (window.innerWidth > 960) { 
      $(window).bind('scroll', function(){ if ($(window).scrollTop() > 160) {$('.nav-primary').addClass('nav-primary-fixed');} else {$('.nav-primary').removeClass('nav-primary-fixed');}}); 
     } else {} 
     // end responsive nav primary fixed 
    }) .resize(); // trigger resize event 

    }); 
}); 

Любые идеи?

Заранее благодарен.

+1

Проверьте, соответствует ли navbar классом «nav-primary-fixed», а затем измените значение 40 ...? – CBroe

+0

Я не уверен, что вы неправильно поняли вопрос. Якорная прокрутка отлично работает, если сайт уже прокручивается более чем на 160 пикселей, а navbar имеет «nav-primary-fixed». Он не выравнивает якоря должным образом, если сайт не был прокручен сверху, а навигационная панель еще не исправлена. Так, например, на странице загрузки, если я нажимаю и якорь ссылку он будет прокручиваться до точки привязки, но в верхней части узловой точки будут скрыты 40px за навигационной панели. Если ваше решение - правильный путь для продвижения вперед, я не знаю, как это сделать в моем текущем коде. – SharpenedPixels

+1

Для этого требуется 40px смещение, только если navbar установлен. Поэтому проверьте, является ли это (.hasClass), и в зависимости от этого вычтите эти 40px, или нет. – CBroe

ответ

1

Хорошо, поэтому с небольшой помощью от CBroe в комментариях к вопросу я провел некоторое исследование на .hasClass и нашел несколько статей, которые помогли мне разработать способ сделать это, следующий код jQuery изменен и теперь работает, по желанию, код:

jQuery(document).ready(function($) { 
    $('a[href*="#"]:not([href="#"])').click(function() { 
    if (location.pathname.replace(/^\//,'') === this.pathname.replace(/^\//,'') && location.hostname === this.hostname) { 
     var target = $(this.hash); 
     target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
     if ($(".nav-primary").hasClass("nav-primary-fixed")) { 
     if (target.length) { 
      $('html, body').animate({ 
      scrollTop: target.offset().top - 40 
      }, 750); 
      return false; 
     } 
     } else { 
     if (target.length) { 
      $('html, body').animate({ 
      scrollTop: target.offset().top - 80 
      }, 750); 
      return false; 
     } 
     } 
    } 
    }); 
}); 
+1

Отлично, но вы все равно можете немного его укоротить. Посмотрите на if- и else-ветку, их код идентичен, кроме фактического значения. Итак, почему бы не сохранить это значение в переменную авансом, а затем иметь код, который был внутри if и else только один раз, используя переменную вместо 40/80 ... – CBroe

+0

У меня с тех пор добавлено другое заявление elseif для применения другого значение для ширины экрана меньше 960 пикселей, так как мобильные и планшеты не выравнивали якорь должным образом и то, что у меня исправлено. Я пробовал что-то подобное, но это не сработало, но тогда я не пробовал его с помощью точного if, elseif, else, используемого в рабочем коде, так что, возможно, если я снова потрудился, я мог бы сократить вы предлагаете. Еще раз спасибо. – SharpenedPixels

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

  • Нет связанных вопросов^_^