下記の質問を参考にやってみたのですが下記のことをやりたくてつまずいてしまいました。
知恵をお貸しいただけませんでしょうか。よろしくお願いいたします。
複数個のスライダーを時間差で動かして回転しているかのように見せる方法
*実現したいこと
・前のスライドに戻る、次のスライドに進むボタンのクリックイベントの実装
・.slideListの数とslideItemの数に差異があっても問題ないようにしたい
よろしくお願いいたします。
html
1<div class="slider"> 2 <div class="sliderInner"> 3 <div class="sliderPrev"> 4 <ul class="slideList"> 5 <li class="slideList_node"><img src="img1.jpg"></li> 6 <li class="slideList_node"><img src="img2.png"></li> 7 <li class="slideList_node"><img src="img3.jpg"></li> 8 </ul> 9 </div> 10 <div class="sliderNext"> 11 <ul class="slideList"> 12 <li class="slideList_node"><img src="img1.jpg"></li> 13 <li class="slideList_node"><img src="img2.png"></li> 14 <li class="slideList_node"><img src="img3.jpg"></li> 15 </ul> 16 </div> 17 <div class="sliderCenter"> 18 <ul class="slideList"> 19 <li class="slideList_node"><a href=""><img src="img1.jpg"></a></li> 20 <li class="slideList_node"><a href=""><img src="img2.png"></a></li> 21 <li class="slideList_node"><a href=""><img src="img3.jpg"></a></li> 22 </ul> 23 </div> 24 <ul class="sliderController"> 25 <li class="sliderControllerPrev"></li> 26 <li class="sliderControllerNext"></li> 27 </ul> 28 </div> 29</div>
css
1.slider { 2 width: 100%; 3 margin: 0 auto; 4 position: relative; 5} 6 7.sliderInner { 8 position: relative; 9 width: 100%; 10 height: 500px; 11} 12 13.slideList { 14 position: relative; 15 margin: 0 auto; 16} 17 18.slideList_node { 19 display: none; 20 opacity: 0; 21} 22 23.slideList_node.active { 24 display: block; 25 opacity: 1; 26} 27 28.sliderPrev, .sliderNext { 29 display: block; 30 width: 100%; 31 height: 450px; 32 opacity: 0.7; 33 position: absolute; 34 top: 50px; 35 left: 0; 36 z-index: 100; 37} 38 39.sliderPrev .slideList, .sliderNext .slideList { 40 width: 720px; 41 height: 360px; 42} 43 44.sliderPrev .slideList_node, .sliderNext .slideList_node { 45 position: absolute; 46 top: 0; 47 left: 0; 48 display: block; 49 width: 720px; 50 height: 360px; 51 overflow: hidden; 52} 53 54.sliderPrev img, .sliderNext img { 55 width: 100%; 56} 57 58.sliderPrev .slideList_node { 59 left: -240px; 60} 61 62.sliderNext .slideList_node { 63 left: 240px; 64} 65 66.sliderCenter { 67 position: absolute; 68 top: 0; 69 left: 0; 70 z-index: 150; 71 display: block; 72 width: 100%; 73 height: 450px; 74} 75 76.sliderCenter .slideList { 77 width: 900px; 78 height: 450px; 79} 80 81.sliderCenter .slideList_node { 82 position: absolute; 83 top: 0; 84 left: 0; 85 display: block; 86 width: 900px; 87 height: 450px; 88} 89 90.sliderController { 91 clear: both; 92 width: 900px; 93 position: relative; 94 margin: 0 auto; 95} 96 97.sliderControllerPrev, .sliderControllerNext { 98 position: absolute; 99 top: 180px; 100 z-index: 999; 101 display: block; 102 width: 40px; 103 height: 200px; 104 overflow: hidden; 105 background-color: #eee; 106} 107 108.sliderControllerPrev { 109 left: 0; 110} 111 112.sliderControllerNext { 113 right: 0; 114}
jQuery
1$(function(){ 2 3 var windowWidth = $(window).width(); 4 // var slideWidth = $('.slideList_node').width(); 5 var slideMax = $('.sliderCenter .slideList_node').length; 6 7 $('.slideList').each(function(index){ 8 var current = index; 9 var centerFlag = $(this).parent().hasClass('sliderCenter'); 10 var slideItem = $(this).find('.slideList_node'); 11 var max = slideItem.length; 12 var slideWidth = slideItem.width(); 13 slideItem.eq( current ).addClass( "active" ); 14 // eachの外で実行できるようにしたい 15 function slideMove(){ 16 // slideItem.each(function(index){ 17 // $(this).attr('data-index', index); 18 // }); 19 var currentSlide = slideItem.eq( current ); 20 currentSlide.animate({ 21 left: centerFlag ?"-=1800":"+=2000" 22 },500,function(){ 23 $(this).removeClass( "active" ); 24 $(this).css( 25 'left', centerFlag ?"+=1800":"-=2000" 26 ); 27 current++; 28 29 if ( current >= max ) { 30 current = 0; 31 } 32 33 var nextSlide = slideItem.eq( current ); 34 nextSlide.css( 35 'left',centerFlag ?"+=1800":"-=2000" 36 ); 37 nextSlide.addClass( "active" ); 38 nextSlide.animate({ 39 left:centerFlag ?"-=1800":"+=2000" 40 },500, function(){ 41 setTimeout(slideMove, 2000); 42 }); 43 }); 44 } 45 slideMove(); 46 47 }); 48 49 50 $('.sliderControllerPrev').click(function(){ 51 // autoplayを停止して前のSlideに戻るように実装したい 52 slideMove(); 53 }); 54 55 $('.sliderControllerNext').click(function(){ 56 slideMove(); 57 }); 58 59});
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。