Я использую библиотеку jquery -scrollspy . Для простых случаев это прекрасно работает. Но я хочу, чтобы ссылка «Домой» на одном из моих веб-сайтов прокручивалась вверх и отправляла сигнал onLeave
при прокрутке во второй раздел.
Таким образом, на сайте есть следующие разделы (например):
body#home
section[data-scrollspied]#music
section[data-scrollspied]#other
и код, который я пытаюсь использовать, таков:
(function ($) {
$(function () {
var $links = $("a[href^='#']");
$('body, section[data-scrollspied]').each(function() {
var $this = $(this);
var position = $this.position();
var start = position.top;
var end = position.top + $this.height();
if ($this.is("body")) {
end = $("section[data-scrollspied]:first").position().top;
}
$this.scrollspy({
min: start,
max: end,
onEnter: function(element /*, position*/ ) {
$('a[href="#' + $this.attr("id") + '"]').addClass("active");
},
onLeave: function(element /*, position*/ ) {
$('a[href="#' + $this.attr("id") + '"]').removeClass("active");
}
});
});
$links.on("click", function () {
//setTimeout(function () {
$links.removeClass("active");
$(this).addClass("active");
//}, 500);
});
});
})(jQuery);
Как видите, это некрасиво и использует несколько хаков, и даже с ними на сайте не работает, как я хочу. Единственная проблема, связанная с тем, что при загрузке страницы первая ссылка, прокручивающаяся до верхней части страницы, не устанавливается как активная.
Пример, который не работает с тегом body, как я хочу , но в остальном работает очень хорошо, есть в этот JSFiddle .
Если мне это поможет, я могу использовать другую библиотеку scrollspy.
Спасибо!
Обновление 1
Мне просто нужно было поместить активный класс в ссылку #home в начальной строке HTML, и все работает хорошо.
Обновление 2
Я думал все работало хорошо, пока я не включил эту часть CSS:
html {
scroll-behavior: smooth;
}
Проблема в том, что когда я нажимаю на одну из 3 ссылок, их класс active
не переключается хорошо, иногда есть 2 активных ссылки одновременно.