Собираем якоря в плавающий список

Однажды каждый из нас пробовал делать якорные ссылки внутри статей на своих сайтах. И никто не будет отрицать, что это муторное занятие. Также, многие из нас видели принципы оформления больших статей, например F.A.Q, на каком-нибудь из сайтов в интернете, где список вопросов (ссылок на якоря) размещается вверху, а ответы на эти вопросы, где-то ниже, к которым можно легко переместиться посредством этих ссылок.

Никто не спорит об удобности якорных ссылок, но… Как быть, если ссылок очень много? И как быть, если статья настолько большая, что просто невыносимо постоянно прокручивать страницу то вверх, то вниз? Ну и на последок — а что если вообще настолько лениво, что не хочется вообще делать никаких якорных ссылок?

Предлагаю небольшое решение, скрипт для сайта, которые соберет якоря в плавающий список. Почему в плавающий? А чтобы посетители не мучились прокручивать страницу вверх/вниз.

Как это работает?

Итак, скрипт будет работать при помощи библиотеки jQuery, поэтому для начала необходимо подключить её.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

Предлагаю сперва разобрать вариант с якорными ссылками. Мы будем собирать список ссылок внутри статьи, т.е. те, которые не имеют атрибут href.

Разместите в статье несколько ссылок подобного рода.

Важно: не добавляйте ссылку просто перед текстом, оберните хотя бы часть, чтобы иметь хоть какой-то заголовок для ссылки.

<p><a name="target1">Блок 1</a></p>
<p><a name="target2">Блок 2</a></p>
<p><a name="target3">Блок 3</a></p>
<p><a name="target4">Блок 4</a></p>

Теперь добавляем код скрипта

<script>
jQuery(function() {
	jQuery('body').append('<div class="list_anchor"></div>');
	jQuery('a:not([href])').each(function() {
		jQuery('body').children('div.list_anchor').append('<a href="#' + this.name + '">' + this.text + '</a><br />');
	});
});
</script>

В самом начале мы добавляем отдельный блок с классом list_anchor для ссылок в тело body. Если у Вас уже заготовлен для этих нужд отдельный блок, то просто удалите эту строку кода.

Обратите внимание на строку

jQuery('a:not([href])').each(function() {

С помощью функции each мы перебираем все ссылки на текущей странице. a:not([href]) — позволяет перебирать лишь ссылки, не содержащие атрибут href, т.е. берем только якоря. После чего мы добавляем ссылку в ранее созданный блок list_anchor.

Для корректного отображения, давайте также зададим стили для плавающего блока list_anchor.

<style>
div.list_anchor {
	position: fixed;
	top: 25%;
	right: 2px;
	border: 1px solid #000;
	background-color: #dfdfdf;
}
</style>

В принципе это всё, дальнейшее оформление строго за Вами.

А теперь, предлагаю разобрать этот же код, но в случае, когда Вы не хотите делать якоря.

Прежде чем приступить, подготовьте свою статью должным образом. Например, будем собирать ссылки на заголовки подразделов статьи. Заголовки в свою очерь обернуты в div с именем класса title. Как нам известно, ссылка должна вести на уникальный элемент, поэтому каждому заголовку задайте уникальный name или id.

<div class="title" id="block1">Блок 1</div>
<div class="title" id="block2">Блок 2</div>
<div class="title" id="block3">Блок 3</div>
<div class="title" id="block4">Блок 4</div>

После чего добавляем слегка видоизмененный скрипт

<script>
jQuery(function() {
	jQuery('body').append('<div class="list_anchor"></div>');
	jQuery('div.elem').each(function() {
		jQuery('body').children('div.list_anchor').append('<a href="#' + jQuery(this).attr('id') + '">' + jQuery(this).text() + '</a><br />');
	});
});
</script>

Как видите, практически ничего не изменилось, теперь ссылаться будем на id заголовков jQuery(this).attr(‘id’)

В одной из предыдущих статей мы рассматривали плавный переход по якорям на jQuery, что в данном случае было бы тоже не лишним. Таким образом мы собрали все якоря в плавающий список.

Вы также можете скачать пример работы скрипта из вложения в конце статьи.

Комментарии

Здесь еще никто не оставлял комментарии.

Добавить комментарий