Добавить класс к ссылке привязки при прокрутке мимо якоря div - jquery
У меня есть страница, на которой есть якоря, которые ссылаются на соответствующие разделы страницы. Мне интересно, есть ли у кого-нибудь совет о том, как я могу переключать класс якорной ссылки при щелчке по ссылке, а также когда окно / страница прокручивается до соответствующего div с использованием jQuery?
Например, есть 3 якорные ссылки, которые ссылаются на 3 раздела:
<ul>
<li><a href="#section1">Section 1</li>
<li><a href="#section2">Section 2</li>
<li><a href="#section3">Section 3</li>
</ul>
Тогда есть 3 раздела:
<div id="section1"></div>
<div id="section2"></div>
<div id="section3"></div>
То, что я хотел бы сделать, это когда страница прокручивается к одному из элементов div или щелкается привязка, класс ссылки привязки будет переключаться. Таким образом, если щелкнуть привязку #section 1 или страница прокручивается до элемента # section1, класс будет добавлен к ссылке привязки section1. Если раздел 2, то ссылка #section2 получит класс, а ссылка section1 удалит класс и так далее.
Я думаю, что мне может понадобиться способ отследить расположение каждого раздела div и затем переключить класс по соответствующей ссылке, но я не слишком уверен, с чего начать.
Заранее спасибо за любую помощь или совет.
1 ответ
Я бы предложил найти общую высоту каждой секции. Я предполагаю, что между каждым разделом также нет перерывов. Затем используйте jQuery для определения положения окна. Когда положение окна достигает определенного значения, переключите класс. Надеемся, что это можно сделать только с помощью прокрутки, поэтому при нажатии на ссылку она будет прокручиваться, и ранее описанная функция сможет запускать и изменять классы для вас.
Вот некоторый псевдокод
$(document).ready(function(){
var section1Height = $('#section1').height();
var section2Height = $('#section2').height();
var section3Height = $('#section3').height();
$(window).scroll(function() {
var winTop = $(window).scrollTop();
if(winTop >= section1Height && winTop <= section2Height){
$('#section1').addClass("newClass").not().removeClass("newClass");
} else if(winTop >= section2Height && winTop <= section3Height){
$('#section2').addClass("newClass").not().removeClass("newClass");
} else if(winTop >= section3Height){
$('#section3').addClass("newClass").not().removeClass("newClass");
}
});
});
Опять же, это всего лишь быстрый пример. Более подробно с вашей стороны, я могу дать более подробный ответ.