@Ty39

Как открыть спойлер при возврате на предыдущую страницу?

на странице есть несколько таких спойлеров:
<details>
<summary>Имя спойлера</summary>
<div id="details-content">
<p><a href="ссылка1">Имя ссылки1</a></p>
<p><a href="ссылка2">Имя ссылки2</a></p>
<p><a href="ссылка3">Имя ссылки3</a></p>
</details>
<link href="css спойлера" rel="stylesheet" />


По умолчанию спойлеры закрыты. Если пользователь откроет спойлер, перейдет по ссылке, а затем вернется на страницу со спойлерами, они будут все закрыты. А хотелось бы, чтобы остались открыты те, которые он открывал. Как можно реализовать?
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
i229194964
@i229194964
Веб разработчик
Добавьте атрибут data-spoiler-id к каждому спойлеру
<div class="spoiler" data-spoiler-id="spoiler1">
  <div class="spoiler-header">Имя спойлера</div>
  <div class="spoiler-content">
    <a href="#">Имя ссылки1</a>
    <a href="#">Имя ссылки2</a>
    <a href="#">Имя ссылки3</a>
  </div>
</div>

// Получить все спойлеры на странице
const spoilers = document.querySelectorAll('.spoiler');

// Пройти по каждому спойлеру и добавить обработчик клика
spoilers.forEach(spoiler => {
  const spoilerId = spoiler.getAttribute('data-spoiler-id');
  const isSpoilerOpen = localStorage.getItem(spoilerId) === 'true';

  // Установить начальное состояние спойлера (открыт/закрыт)
  if (isSpoilerOpen) {
    spoiler.classList.add('open');
  } else {
    spoiler.classList.remove('open');
  }

  // Добавить обработчик клика для сохранения состояния спойлера в localStorage
  spoiler.addEventListener('click', () => {
    const isOpen = spoiler.classList.contains('open');
    localStorage.setItem(spoilerId, !isOpen);
  });
});

.spoiler.open .spoiler-content {
  display: block;
}

Теперь каждый раз, когда пользователь открывает или закрывает спойлер, его состояние будет сохраняться в localStorage. При обновлений страницы будет отображаться в котором было до этого.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы