Intereting Posts
Кнопка Toggle внутри аккордеона с использованием jquery Установите высоту div равную размеру экрана добавление параметров URL в форму PHP HTML Автоматическое закрытие тегов html и jsp, php, asp-тегов в блокноте ++ и точка с запятой в конце строки, написанная на скриптлетах Почему два блока необходимо поместить влево для выравнивания? Как использовать CSS-спрайт для повторного фонового изображения? Вам нужно включить ? Как отключить отправку формы, если имя пользователя недоступно Почему эта конкатенация вместо сложения bootstrap 3 для загрузки 4 столбцов больше не выравнивается по горизонтали Должен ли быть определен тип TYPE? Как закрыть это меню, нажав на него? Как проверить, полностью ли виден элемент на экране? Установить курсор как элемент Как определить, действительно ли файл загружен и сохранен, несмотря на предварительную выборку / кеш браузера?

Как добавить плавную прокрутку к функции шпионажа Bootstrap

Я пытаюсь добавить гладкую функцию прокрутки на свой сайт некоторое время, но, похоже, не может заставить ее работать.

Вот мой код HTML, относящийся к моей навигации:

 

Вот код JS, который я добавил:

   $(document).ready(function(e) { $('#nav').scrollSpy() $('#nav ul li a').bind('click', function(e) { e.preventDefault(); target = this.hash; console.log(target); $.scrollTo(target, 1000); }); });  

Для чего это стоит, вот где я получил информацию о том, что я сделал до сих пор, и вот мой сайт в его текущей форме. Если вы можете мне помочь, я выпечу вам пирог или печенье или что-то в этом роде. Благодаря!

Вам действительно нужен этот плагин? Вы можете просто оживить свойство scrollTop :

 $("#nav ul li a[href^='#']").on('click', function(e) { // prevent default anchor click behavior e.preventDefault(); // store hash var hash = this.hash; // animate $('html, body').animate({ scrollTop: $(hash).offset().top }, 300, function(){ // when done, add hash to url // (default click behaviour) window.location.hash = hash; }); }); 

играть на скрипке

Если у вас есть фиксированный навигатор, вам понадобится что-то вроде этого.

Принимая из лучших из вышеперечисленных ответов и комментариев …

 $(".bs-js-navbar-scrollspy li a[href^='#']").on('click', function(event) { var target = this.hash; event.preventDefault(); var navOffset = $('#navbar').height(); return $('html, body').animate({ scrollTop: $(this.hash).offset().top - navOffset }, 300, function() { return window.history.pushState(null, null, target); }); }); 

Во-первых, чтобы предотвратить «неопределенную» ошибку, сохраните хеш переменной, target , перед вызовом функции preventDefault() и позже preventDefault() это сохраненное значение, как упоминалось pupadupa.

Следующий. Вы не можете использовать window.location.hash = target потому что он устанавливает URL и местоположение одновременно, а не отдельно. У вас будет место в начале элемента, чей идентификатор совпадает с href … но покрыт вашей фиксированной верхней навигационной панелью.

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

Вы заметите, что URL-адрес не изменяется. Чтобы установить это, используйте return window.history.pushState(null, null, target); вместо этого вручную добавить URL-адрес в стек истории.

Готово!

Другие примечания:

1) использование метода .on – это самый последний (по состоянию на январь 2015 г.) метод jquery, который лучше, чем .bind или .live или даже .click по причинам, которые я оставлю вам, чтобы узнать.

2) значение navOffset может находиться внутри функции или снаружи, но вы, вероятно, захотите ее на улице, так как вы можете очень хорошо ссылаться на это вертикальное пространство для других функций / манипуляций с DOM. Но я оставил его внутри, чтобы сделать его аккуратно в одну функцию.

 $("#YOUR-BUTTON").on('click', function(e) { e.preventDefault(); $('html, body').animate({ scrollTop: $("#YOUR-TARGET").offset().top }, 300); }); 

Если вы загрузите плагин jquery easing (проверьте его) , вам просто нужно добавить это в свой файл main.js:

 $('a.smooth-scroll').on('click', function(event) { var $anchor = $(this); $('html, body').stop().animate({ scrollTop: $($anchor.attr('href')).offset().top + 20 }, 1500, 'easeInOutExpo'); event.preventDefault(); }); 

а также не забудьте добавить class гладкой прокрутки к вашим тегам следующим образом:

  
  • About Us
  • Я объединил его, и это результат –

     $(document).ready(function() { $("#toTop").hide(); // fade in & out $(window).scroll(function () { if ($(this).scrollTop() > 400) { $('#toTop').fadeIn(); } else { $('#toTop').fadeOut(); } }); $('a[href*=#]').each(function() { if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname && this.hash.replace(/#/,'') ) { var $targetId = $(this.hash), $targetAnchor = $('[name=' + this.hash.slice(1) +']'); var $target = $targetId.length ? $targetId : $targetAnchor.length ? $targetAnchor : false; if ($target) { var targetOffset = $target.offset().top; $(this).click(function() { $('html, body').animate({scrollTop: targetOffset}, 400); return false; }); } } }); }); 

    Я тестировал его, и он отлично работает. надеюсь, это поможет кому-то 🙂

    Что опубликовано в onetrickpony , но если вы хотите иметь более общее решение, вы можете просто использовать код ниже.

    Вместо того, чтобы выбирать только id якоря, вы можете сделать его более стандартным и просто выбрать name атрибута -Tag. Это избавит вас от написания дополнительного тега id . Просто добавьте class smoothscroll к элементу navbar.

    Что изменилось

    1) $('#nav ul li a[href^="#"]') до $('#nav.smoothscroll ul li a[href^="#"]')

    2) $(this.hash) до $('a[name="' + this.hash.replace('#', '') + '"]')

    Окончательный код

     /* Enable smooth scrolling on all links with anchors */ $('#nav.smoothscroll ul li a[href^="#"]').on('click', function(e) { // prevent default anchor click behavior e.preventDefault(); // store hash var hash = this.hash; // animate $('html, body').animate({ scrollTop: $('a[name="' + this.hash.replace('#', '') + '"]').offset().top }, 300, function(){ // when done, add hash to url // (default click behaviour) window.location.hash = hash; }); });