Слайдер Swiper не работает, если страница не изменена

Я пытаюсь добавить плагин Swiper на одну из моих страниц. То, чего я пытаюсь достичь, это интегрировать, получить здесь слайдер карусели http://idangero.us/swiper/demos/05-slides-per-view.html

HTML

 <div class="swiper-container">
    <div class="swiper-wrapper">
    <div class="swiper-slide">Slide 1</div>
    <div class="swiper-slide">Slide 2</div>
    <div class="swiper-slide">Slide 3</div>
    <div class="swiper-slide">Slide 4</div>
    <div class="swiper-slide">Slide 5</div>
    <div class="swiper-slide">Slide 6</div>
    <div class="swiper-slide">Slide 7</div>
    <div class="swiper-slide">Slide 8</div>
    <div class="swiper-slide">Slide 9</div>
    <div class="swiper-slide">Slide 10</div>
    </div>

    <div class="swiper-pagination"></div>
    </div>

JS

var swiper = new Swiper('.swiper-container', {
        pagination: '.swiper-pagination',
        slidesPerView: 3,
        paginationClickable: true,
        spaceBetween: 30,
        // Navigation arrows
    nextButton: '.swiper-button-next',
    prevButton: '.swiper-button-prev',
    });

Когда я добавляю его на скрипку, оно работает, но когда я добавляю его на страницу html, swiper не работает, пока я не открою firebug или не изменим размер страницы ( http://vidznet.com/ng1/swiper/swipe.html). Я не уверен если при инициализации конфликтует, потому что в консоли нет ошибок.

Потратив некоторое время, я подумал, что это может быть проблема с jquery, и обернул код внутри

pagebeforecreate

 $(document).on( "pagebeforecreate", "#new_",function( event ) { 

но все тот же,

Я также добавил код ниже

swiper.updateContainerSize();

который должен обновлять размер контейнера, но все еще не работает.

Любая помощь будет высоко ценится.

11 ответов

Ползунки Swiper, для правильной работы, требуют, чтобы вы:

  • инициализировать их, когда они видны;
  • обновлять их, когда они становятся видимыми;
  • включить параметры наблюдателя.
    • observer: true;
    • observeParents: true,

Как заявили Исаихироко и создатель Swiper (по этому вопросу), выполнение одной из упомянутых тем наверняка решит вашу проблему!

Также я столкнулся с этой проблемой, я думаю, вам следует добавить две строки (параметры) в Java Script swipper,

var galleryThumbs = new Swiper('.gallery-thumbs', {
            observer: true,
            observeParents: true,
            loop: true,
            spaceBetween: 10,
            slidesPerView: 4,
            freeMode: true,
            watchSlidesVisibility: true,
            watchSlidesProgress: true,
        })

Где "obeserver: true" и "ObserverParents: true" - это параметры, которые влияют на правильную работу вашего swipper. Это заставит мой swipper работать правильно! Надеюсь, вы закончите!

Используйте этот код:

swiper.update();

Это решило мою проблему

  1. Добавьте эти строки в свою инициализацию swiper

    observer: true, observeParents: true,

    ваша инициализация будет выглядеть так

              var swiper = new Swiper('.swiper-container', {
        pagination: '.swiper-pagination',
        slidesPerView: 3,
        observer: true,
        observeParents: true,
        paginationClickable: true,
        spaceBetween: 30,
        // Navigation arrows
    nextButton: '.swiper-button-next',
    prevButton: '.swiper-button-prev',
    });
    
  2. Затем обновите свой экземпляр swiper с помощью

    swiper.update()

Я попробовал приведенный ниже код, он сработал для меня, мой swiper присутствовал внутри вкладки, когда мой документ загружен, swipper не работал, если и если я не изменил размер экрана, поэтому я попробовал код ниже, он работал

var swiper = new Swiper('#upcoming-appointments', {
        slidesPerView: 1,
        spaceBetween: 30,
        loop: true,
        pagination: {
            el: '.swiper-pagination',
            clickable: true,
        },
        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
        },
//<---Add this two lines in your code-->   
       observer: true,  
       observeParents: true,
    });

Для Angular:

Добавлять (swiper)="onSwiper($event)" на ваш swiper компонент.

<swiper (swiper)="onSwiper($event)"></swiper>

И в твоем .ts добавлять:

      onSwiper(swiper) {
  swiper.update();
}

У меня была аналогичная проблема, в моем случае я заменяю имя класса swiper-container с участием swiper в основном контейнере

Вы можете попробовать:

$(window).on({
   load: function(){
      $(this).trigger('resize');
    } 
  });

хотя это немного липкое решение.

У меня была аналогичная проблема,

в моем случае добавление rebuildOnUpdate: true помогло (вам также может понадобиться observer: true как уже упоминалось выше)

ps я работаю с react-id-swiper и swiper

Для всех, кто читает это и использует версию 6.x Swiper, вам необходимо импортировать дополнительные модули (например, навигацию, разбиение на страницы и т. Д.), Чтобы они работали.

// core version + navigation, pagination modules:
import Swiper, { Navigation, Pagination } from 'swiper';

// configure Swiper to use modules
Swiper.use([Navigation, Pagination]);

// init Swiper:
const swiper = new Swiper(...);

Только добавить

автовоспроизведение: {задержка:3000,disableOnInteraction:false}

к параметрам

Другие вопросы по тегам