Задать вопрос
HelpSophie
@HelpSophie

Почему не убираются стили и стрелки Swiper при destroy?

Почему не убираются стили и стрелки Swiper при destroy?
Нужно, чтобы слайдер работал только при вьюпорте >1000, а при меньшем была кучка картинок.
Вроде бы написано mySwiper.destroy( true, true ) - должны убраться. А они остаются.

https://jsfiddle.net/Lq15jmuz/
  • Вопрос задан
  • 1262 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F
Про стили не понял, а стрелки... Встречный вопрос - почему они должны убираться? Вы эти элементы создали - сами и решайте, что с ними делать. Например, можно их показывать/прятать при создании/уничтожении слайдера. После инициализации/дестроя у контейнера переключается класс swiper-container-initialized, можно назначать нужные стили в зависимости от его наличия:

.swiper-container:not(.swiper-container-initialized) {
  .swiper-button-prev,
  .swiper-button-next,
  .swiper-pagination {
    display: none;
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Andrey_PSK
@Andrey_PSK
Вопрос древний, но там фишка в контексте выполнения функций и области видимости переменных.
На примере, переменная в которую записывается объект свайпера, лежит в самом верху.

Решал похожую задачу, и случайно написал переменную внутрь функции инициализации.
По итогу, я тупо не мог дотянуться до нужного экземпляра свайпера, чтоб применить ему метод дестрой.

{
    const parent = document.querySelector(".parent");
    if (!parent) return;

    const sliderEl = parent.querySelector(".slider");
    let slider;

    const checkWindowSize = () => {
        if (window.innerWidth >= 1024 && window.innerHeight >= 720) return true;
        return false;
    };

    function init() {
        if (slider) slider.destroy(true, true);

        if (checkWindowSize()) {
            slider = new Swiper(sliderEl, {
                mousewheel: true,
            });
        }
    }

    window.addEventListener("resize", () => {
        init();
    });

    init();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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