swiper.jsのactiveIndexの取得タイミングがうまくいかない
現在、swiper.jsを利用し、「スライド後」のページ番号(swiperContentsのactiveIndex)を取得しようと試みています。
発生している問題・エラーメッセージ
①取得できるときとできないときがある。
②例えばページが3つあり(仮にA,B,Cとする)、A→Bに遷移したときはキチンと「1」という番号が取得できます。
(ちなみにA=0,B=1,C=2というページ番号になっています)がC→B、B→Aにいくと「-1」という番号になります。
一度「-1」になると以降「-1」になります。
※メニュー部分を押して切り替える際はきちんと正常動作致します。コンテンツ部分のスライドのみが問題となります。
※2つswiperがありますが、問題になっているのは
クラス名が「.swiper-contents」の箇所です。
jsの変数名でいうと「swiperContents」です。
該当のソースコード
javascript
1document.addEventListener("init", function(event) { 2 $(function(){ 3 function setCurrentSlide(ele, index) { 4 $(".swiper-navigation .swiper-slide").removeClass('selected'); 5 ele.addClass('selected'); 6 } 7 swiperNavigation = new Swiper('.swiper-navigation', { 8 slidesPerView: 'auto', 9 pagination: { 10 clickable: true 11 }, 12 freeMode: true, 13 loop: false, 14 autoplay: false 15 }); 16 swiperContents = new Swiper('.swiper-contents', { 17 direction: 'horizontal', 18 loop: false, 19 autoHeight: true 20 }); 21 swiperContents.on('slideChange', function() { 22 // 特定の要素を引数に指定し、順番を変数に格納 23 var i = swiperContents.activeIndex; 24 // 変数の中身をコンソールに表示 25 console.log(i); 26 setCurrentSlide($('.swiper-navigation .swiper-slide').eq(i), i); 27 swiperNavigation.slideTo(i, 500, false); 28 });
HTML
1<div class="container contents"> 2 <div class="swiper-container swiper-navigation"> 3 <div class="swiper-wrapper sp-navi"> 4 <div class="swiper-slide selected">メニュー1</div> 5 <div class="swiper-slide">メニュー2</div> 6 <div class="swiper-slide">メニュー3</div> 7 </div> 8 </div> 9 <div class="swiper-container swiper-contents"> 10 <div class="swiper-wrapper sp-content"> 11 <div class="swiper-slide"> 12 <p>メニュー1コンテンツ</p> 13 </div> 14 <div class="swiper-slide"> 15 <p>メニュー2コンテンツ</p> 16 </div> 17 <div class="swiper-slide"> 18 <p>メニュー3コンテンツ</p> 19 </div> 20 </div> 21 </div> 22 </div>
試したこと
イベントのslideChangeの実行タイミングが悪いのかと思い、そのほかにも
slideChangeTransitionEnd
transitionEnd
progress
などを試しましたが、直りませんでした。
補足情報(FW/ツールのバージョンなど)
https://nonbiri.life/web/javascript/swiper/
このサイトを参考に作成致しました。
また、ハイブリッドアプリを作成しているため、ios,androidを実機としてプレビューしています。
回答1件
あなたの回答
tips
プレビュー