У меня следующая проблема: я создаю блог с дополнительной галереей изображений для каждого поста.Галерея открывается в модальном режиме после того, как вы щелкнете по изображению предварительного просмотра, а затем до 4 изображений отображаются в виде swiper-галереи.
Проблема в том, что только первый открытый модал отображает галерею со всеми js, примененными к ней.Когда я открываю следующий, я могу перетащить картинки, но слайдер работает неправильно.Однако, когда я изменяю размер окна браузера, оно начинает работать правильно.То же самое относится к каждой следующей галерее, которая открывается.
Я много экспериментировал, помещая скрипт внутри и снаружи цикла с различными классами HTML или без них.На данный момент, я предполагаю, что это как-то связано с 'show.bs.modal' в методе jQuery .on (), который загружается только один раз.Но я не знаю, как это исправить.
HTML:
{% for post in posts %}
<!--preview picture-->
<img src="{{ post.image_0.url }}" class="blog-pic" data-toggle="modal" data-target="#{{ post.slug }}">
<!--modal-->
<div class="modal fade" id="{{ post.slug }}">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ post.title }}</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<div class="swiper-container {{ post.slug }}">
<div class="swiper-wrapper">
<div class="swiper-slide"><img src="{{ post.image_0.url }}" id="swipe-img"></div>
<div class="swiper-slide"><img src="{{ post.image_1.url }}" id="swipe-img"></div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
JS / JQuery:
<!--currently positioned within the for loop-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/css/swiper.css">
<script>
$(function(){
$('body').on('shown.bs.modal', function() {
var swiper{{ post.id }} = new Swiper('.{{ post.slug }}', {
effect: 'coverflow',
grabCursor: true,
centeredSlides: true,
slidesPerView: 'auto',
coverflowEffect: {
rotate: 50,
stretch: 0,
depth: 1000,
modifier: 1,
slideShadows: false,
},
});
});
});