可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm using Swiper Slideshow. I'm using this particular version. Here's the exact code I'm using.
When adding a second "Swiper", the pagination doesn't work properly.
I tried giving a different class to the second "swiper" container but it didn't work.
How can I have two of this in the same page???
Thanks.
回答1:
Their support sent me this DEMO. It works!
You don't need to do anything to the JS File.
All you need is to add an extra class to pagination, add an extra class also to the slideshow, and differentiate the rest of the classes on everything else (see code below). With this you can have as many slishows as you want in the same page.
<div class="swiper-container swiper1">
<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>
<!-- Add Pagination -->
<div class="swiper-pagination swiper-pagination1"></div>
</div>
<!-- Swiper -->
<div class="swiper-container swiper2">
<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>
<!-- Add Pagination -->
<div class="swiper-pagination swiper-pagination2"></div>
<!-- Swiper JS -->
<script src="../dist/js/swiper.min.js"></script>
<!-- Initialize Swiper -->
<script>
var swiper1 = new Swiper('.swiper1', {
pagination: '.swiper-pagination1',
paginationClickable: true,
});
var swiper2 = new Swiper('.swiper2', {
pagination: '.swiper-pagination2',
paginationClickable: true,
});
<script>
回答2:
My current Swiper version is 3.4.2. When I click on the next-prev button, all the sliders on the page moves.
For set different next-prev buttons I done this:
<div class="swiper-pager">
<div class="swiper-button-next></div>
<div class="swiper-button-prev></div>
</div>
=>
<div class="swiper-pager">
<div class="swiper-button-next swiper-button-next_slideshow<?=$module?>"></div>
<div class="swiper-button-prev swiper-button-prev_slideshow<?=$module?>"></div>
</div>
And in js:
$('#slideshow<?=$module?>').swiper({
mode: 'horizontal',
slidesPerView: 1,
pagination: '.slideshow<?=$module?>',
paginationClickable: true,
// nextButton: '.swiper-button-next', // not work properly
// prevButton: '.swiper-button-prev', // not work properly
nextButton: '.swiper-button-next_slideshow<?=$module?>',
prevButton: '.swiper-button-prev_slideshow<?=$module?>',
spaceBetween: 30,
autoplay: 2500,
autoplayDisableOnInteraction: true,
loop: true
});
回答3:
@David Martins
Thanks a lot, but in current version 4.5.0, you need to modify a little js code:
<script type="text/javascript">
// Init Swiper
var swiper1 = new Swiper('.swiper1', {
pagination: {
el: '.swiper-pagination1',
clickable: true,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
// Enable debugger
debugger: true,
});
var swiper2 = new Swiper('.swiper2', {
autoHeight: true,
pagination: {
el: '.swiper-pagination2',
clickable: true,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
// Enable debugger
debugger: true,
});
anyway, thanks a lot for help!
回答4:
You were going down the right path - you need to add a different class to the second swiper but you also need to add references to the new class in dist/js/swiper.min.js
otherwise it will only be targeting elements using the original class. It should just be a case of copying the relevant sections and repeating them with the new ID (same as what I had to do with wow.js).
回答5:
var i=1;
var str1='sliderBox_'
var str2='.sliderBox_';
$('.swiper-container').each(function (index,value) {
var classAdd = str1 + i;
var classCall = str2 + i;
var next_slider = 'slider-next' + i;
var prev_slider = 'slider-prev' + i;
$(this).addClass(classAdd);
$(this).parent().siblings(".sites-slider__prev").addClass(prev_slider);
$(this).parent().siblings(".sites-slider__next").addClass(next_slider);
new Swiper(classCall,{
slidesPerView: 4,
spaceBetween: 20,
loop: true,
navigation: {
nextEl: ('.' + next_slider),
prevEl: ('.' + prev_slider),
},
breakpoints: {
1199: {
slidesPerView: 3,
},
991: {
slidesPerView: 2,
},
600: {
slidesPerView: 1,
},
}
});
i++;
});
回答6:
In case someone is passing here in search for a solution to conflicts with prev and next button between multiple swipers, this is what fixed it for me (Nuxt.js/SSR project):
1) Add id attributes to button's divs:
<div id="button-next-relacionados" class="swiper-button-next swiper-button-white"></div>
<div id="button-next-relacionados" class="swiper-button-next swiper-button-white"></div>
2) In the swiper options object, refer to the new ids instead of swiper-button-prev
and swiper-button-next
classes:
swiperOption: {
direction: 'horizontal',
slidesPerView: 4,
spaceBetween: 6,
navigation: {
nextEl: '#button-next-relacionados',
prevEl: '#button-prev-relacionados'
},
回答7:
In my case, the issue was with using multiple auto-initialized instances while using Framework7 Core to update slide results based on the data values.
The missing piece for this use case was assigning an id
to the swiper container, for example:
<div class="swiper-container swiper-init" id="swiper-instance-{{
userId}}">
This little bit of magic causes everything to work again, otherwise it tries to re-use the Swiper instances and gets very confused about which one the instance belongs to. Once again Vladimir has thought of everything :)