Я пытаюсь создать таблицу фиксированной контента на странице, которая выдвигает на первый план, какие элементы отображаются на странице, добавив класс под названием «активный» Мой HTML выглядит следующим образом:динамическая таблица содержимого с помощью JQuery
<div id="table_of_content">
<a class="essay_intro" href="#">Intro</a>
<a class="essay_body" href="#">Body</a>
<a class="essay_conclusion" href="#">Conclusion</a>
</div>
<div class="dircontent" id="essay_intro">
</div>
<div class="dircontent" id="essay_body">
</div>
<div class="dircontent" id="essay_conclusion">
</div>
Мой Javascript выглядит следующим образом:
$(document).ready(function() {
$(window).scroll(function(){
$('.dircontent').each(function(i){
var bottom_of_object = $(this).offset().top + $(this).outerHeight();
var top_of_object = $(this).offset().top;
var bottom_of_window = $(window).scrollTop() + $(window).height();
var top_of_window = $(window).scrollTop();
var id_of_object = this.id;
if(bottom_of_window > top_of_object && top_of_window < bottom_of_object){
$("."+id_of_object).attr('class', 'active');
}else{
$("."+id_of_object).removeClass('active');
}
});
})});
в настоящее время код запускается как только я начинаю прокрутки и никогда не уходит. Актив класса никогда не удаляется из элемента, который не отображается на странице. Как я могу это исправить? любое лучшее решение, кроме этого, чтобы показать пользователю, где они находятся на странице? Я ищу простой код, чем плагин.
Да, это сработало. В отличие от первого ответа. Одна из проблем, которые возникли у меня сейчас, заключается в том, что более одного элемента подсвечивается, если видно больше одного. Есть ли в любом случае, что я могу сделать это, когда выделяется только один элемент? – shnisaka
Попробуйте добавить 'return false;' в предложение if после использования 'addClass'. Это приведет к завершению каждого цикла после выделения одного элемента. –
Да, используйте 'return false;', но также добавьте '$ (". Active "). RemoveClass (" active ");' вверху функции прокрутки, чтобы класс удалялся из других элементов. Это сделает объект, который является самым высоким в DOM (сначала в массиве '$ ('. Dircontent')'), чтобы иметь класс. В этом случае вы можете удалить предложение 'else'. – Saulpila