<実現したいこと>
モーダルウィンドウ内でslickを使ってスライドショーを実装したいです。
具体的には、
・画像をクリックしたら同じ画像がモーダルウィンドウ内でスライド画像の最初として出てくる
・モーダルウィンドウ内では左右の矢印をクリックして画像のスライドをさせる
<現状できていること>
・モーダルウィンドウの実装
・左右矢印をクリックしたら画像がスライドする
<発生している問題>
「画像をクリックしたら同じ画像がモーダルウィンドウ内でスライド画像の最初として出てくる」
の実装がうまくいかない状態です。
現状のコードだと、let slideNum = $(this).data('slide');でslideNumに値が入るところまではできているのですが、その後の$('[data-slide="' + slideNum + '"]').click(function() {・・・}が処理されず、スライダーが機能されていない状況です。
<試したこと>
slickのオプション設定でinitialSlideを使うと最初に出てくるスライドを制御できることが分かり、直接initialSlideの値を設定すると実現できました。
この値をslideNumという変数によってクリックした画像が最初に出てくるようにしたいが上手くいかず。。
各画像にdata-slideというカスタムデータ属性を設定して、その値によってslideNumの値を入れ替えて実装できればとやってみたが上手くいかず。。
HTML
1<div class="works-area"> 2 <ul class="gallery"> 3 <li><img src="img/works_1.jpg" alt="" class="modal-open" data-slide="1"></li> 4 <li><img src="img/works_2.jpg" alt="" class="modal-open" data-slide="2"></li> 5 <li><img src="img/works_3.jpg" alt="" class="modal-open" data-slide="3"></li> 6 <li><img src="img/works_4.jpg" alt="" class="modal-open" data-slide="4"></li> 7 </ul> 8</div> 9 10<!-- モーダルウィンドウ --> 11<div class="modal-container"> 12 <div class="modal-body"> 13 <!-- 閉じるボタン --> 14 <div class="modal-close">×</div> 15 <!-- モーダル内のコンテンツ --> 16 <div class="modal-content"> 17 <ul class="slider"> 18 <li> 19 <a href="" target="_blank"><img src="img/works_1.jpg" alt=""></a> 20 <div class="modal-content-text"> 21 <h3><a href="#">タイトル</a></h3> 22 <p>ダミーテキスト</p> 23 </div> 24 </li> 25 <li> 26 <a href="" target="_blank"><img src="img/works_2.jpg" alt=""></a> 27 <div class="modal-content-text"> 28 <h3><a href="" target="_blank">タイトル</a></h3> 29 <p>ダミーテキスト</p> 30 </div> 31 </li> 32 <li> 33 <a href="" target="_blank"><img src="img/works_3.jpg" alt=""></a> 34 <div class="modal-content-text"> 35 <h3><a href="" target="_blank">タイトル</a></h3> 36 <p>ダミーテキスト</p> 37 </div> 38 </li> 39 <li> 40 <a href="" target="_blank"><img src="img/works_4.jpg" alt=""></a> 41 <div class="modal-content-text"> 42 <h3><a href="" target="_blank">タイトル</a></h3> 43 <p>ダミーテキスト</p> 44 </div> 45 </ul> 46 </div> 47 </div> 48</div>
jQuery
1$('.gallery img').click(function() { 2 let slideNum = $(this).data('slide'); 3 4 $('[data-slide="' + slideNum + '"]').click(function() { 5 $('.slider').slick({ 6 fade: true, 7 speed: 1000, 8 infinite: true, 9 slidesToShow: 1, 10 slidesToScroll: 1, 11 arrows: true, 12 prevArrow: '<div class="slick-prev"><span></span></div>', 13 nextArrow: '<div class="slick-next"><span></span></div>', 14 dots: false, 15 initialSlide: slideNum - 1, 16 }); 17 }); 18});
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/22 14:40
2022/03/23 00:42