Как настроить якорные ссылки на странице, чтобы при их нажатии, целевая секция позиционировалась в центре видимой области?

Как можно реализовать так, чтобы при нажатии на ссылку с человеком в списке, страница прокручивалась так, чтобы его позиция в списке оказывалась в центре экрана, насколько это возможно?
  • 5 февраля 2024 г. 11:58
Ответы на вопрос 2
Для настройки якорных ссылок так, чтобы при их нажатии целевая секция позиционировалась в центре видимой области браузера, можно использовать JavaScript для управления прокруткой страницы. Вот общий подход:

1. Добавьте якорные ссылки, указывающие на `id` элементов, которые вы хотите центрировать.

```html
<a href="#section1" class="anchor-link">Перейти к Секции 1</a>

<!-- ... your other content ... -->

<div id="section1">
  <!-- Content of Section 1 -->
</div>
```

2. Напишите JavaScript, который перехватывает клики по якорным ссылкам, рассчитывает позицию элемента и прокручивает страницу так, чтобы этот элемент оказался в центре видимой области.

```javascript
document.querySelectorAll('.anchor-link').forEach(link => {
  link.addEventListener('click', function(e) {
    e.preventDefault(); // Предотвращаем стандартное поведение ссылки
    const targetId = this.getAttribute('href');
    const targetElement = document.querySelector(targetId);

    if (targetElement) {
      // Получаем высоту видимой области браузера
      const viewportHeight = window.innerHeight;
      // Рассчитываем позицию элемента относительно верха страницы
      const targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset;
      // Вычисляем позицию для центрирования элемента
      const offsetPosition = targetPosition - (viewportHeight / 2) + (targetElement.offsetHeight / 2);

      // Прокручиваем страницу к рассчитанной позиции
      window.scrollTo({
        top: offsetPosition,
        behavior: 'smooth' // Плавная прокрутка
      });
    }
  });
});
```

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

Также возможно, что элементы в верхней и/или нижней части страницы не смогут быть точно позиционированы в центре из-за ограниченного пространства. Это также зависит от величины контента и области просмотра.

Обратите внимание, что для того, чтобы код выше работал, необходимо, чтобы стили элементов были полностью загружены, иначе расчеты размеров и позиций могут быть некорректными. Поэтому такой код обычно ставят в обработчик события `window.onload` или `DOMContentLoaded`.
Похожие вопросы