実現したいこと
jQueryでボタンクリックで画像を変更できるスライドショーを作成しています。
スライドの関数を作り、イベントの中で関数に引数として値を投げているイメージです。
if文で「pres」「next」を判別しています。
関数名、引数名は仮名です。
<追記>
一部修正しました。関数内に変数を閉じ込めると関数実行の度に変数が宣言され、値がリセットされてしまっていると考え、クロージャにて再度実装しました。
発生した問題・解決したい問題
変数を関数スコープかイベントの中に閉じ込めたいのですが、イベント内・関数内に閉じようとしたらうまく動作しない。
関数・イベントの外で宣言したら動作しました。
おかしいところのアドバイスを頂きたいです。
<追記>
クロージャにて一部コード修正しましたが、機能しません。
クロージャの扱いが間違っているのか、その他の要因があるのか、アドバイスを頂きたいです。
HTML
1<div class="slider-area"> 2 <ul class="slider-list clearfix"> 3 <li><img src="img/1.jpg" alt=""></li> 4 <li><img src="img/2.jpg" alt=""></li> 5 <li><img src="img/3.jpg" alt=""></li> 6 <li><img src="img/4.jpg" alt=""></li> 7 </ul> 8 <button type="button" class="slider-ctrl-btn prev" data-ctrl="prev"></button> 9 <button type="button" class="slider-ctrl-btn next" data-ctrl="next"></button> 10</div>
javascript
1$(function(){ 2/** 3 *スライド全体を横に移動させる 4 *左端までいくと最後の画像に移動する 5 *右端までいくと最初の画像に戻る 6 * 7 *@param {num} current : 現在地の増減 8 */ 9function slideShow(){ 10 let slideWidth = $('.slider-list').find('li').width(), 11 slideNum = $('.slider-list').find('li').length, 12 slideListWidth = slideWidth * slideNum, 13 slideCurrent = 0, 14 myObj = new Object(); 15 /** 16 *スライド全体の幅を挿入する 17 */ 18 $('.slider-list').css('width',slideListWidth); 19 myObj.slideFunc = function (current){ 20 current; 21 if(slideCurrent < 0){ 22 slideCurrent = slideNum -1; 23 } 24 else if(slideCurrent > slideNum -1){ 25 slideCurrent = 0; 26 } 27 $('.slider-list').animate({ 28 left : slideCurrent * -slideWidth 29 }); 30 } 31 myObj.getCurrent = function (){ 32 return slideCurrent; 33 } 34 return myObj; 35} 36let slideCount = slideShow(); 37 38/** 39 *クリックイベント 40 *ボタンクリックで進む・戻る 41 */ 42$('.slider-area').find('button').on('click',function(){ 43 let currentCount = slideCount.getCurrent(); 44 if($(this).hasClass('next')){ 45 slideCount.slideFunc(currentCount++) 46 } 47 else{ 48 slideCount.slideFunc(currentCount--) 49 } 50}); 51});
回答1件
あなたの回答
tips
プレビュー