2016-07-26 5 views
2

私は基本的なjqueryスライダーを作っていましたが、私は基本的に2回繰り返しました。唯一の違いは、var prevとprevメソッドです。そして最後の方法に最初の方法。DRYコードのヘルプJavaScriptを修正しますか?

left.on('click', function(){ 
    var current = $('.active'); 
    var prev = current.prev(); 
    if (prev.length === 0){ 
    prev = $(".slides").last(); 
    } 

    current.fadeOut(300).removeClass("active"); 
    prev.fadeIn(300).addClass("active"); 
}); 

right.on('click', function(){ 
var current = $('.active'); 
var next = current.next(); 
if (next.length === 0){ 
    next = $(".slides").first(); 
} 
current.fadeOut(300).removeClass("active"); 
next.fadeIn(300).addClass('active'); 
}); 

私はこの機能を試しましたが、機能しません。私は初心者ですので、この種の機能が可能かどうかはわかりません。

right.on('click', function(){ 
    slider("next", "first"); 
}); 

function slider(x, y){ 
var current = $('.active'); 
var x = current.x(); 
if (x.length === 0){ 
    x = $(".slides").y(); 
} 
current.fadeOut(300).removeClass("active"); 
x.fadeIn(300).addClass('active'); 
}); 
right.on('click', slider("next", "first")); 
left.on('click', slider("prev", "last")); 

答えて

3

変更right.on('click', slider("next", "first"))それが動作するかどうかを参照してください。

+1

結合コールまたはプリバインド機能

閉鎖

right.on('click',() => slider("next", "first")); left.on('click',() => slider("prev", "last")); 

ためのクロージャを作成しますか...}} ' – laughingpine

2

関数内の一部の動的値にアクセスしようとしています。そうするときは、ブラケットの表記[]を使用する必要があります。つまり、current.x$(".slides").y()は動作しません。何を行うことができますすることはcurrent[x]

function slider(x, y){ 
var current = $('.active'); 
var slides = current[x](); 
if (slides.length === 0){ 
    x = $(".slides")[y](); 
} 
current.fadeOut(300).removeClass("active"); 
slides.fadeIn(300).addClass('active'); 
}); 

また、あなたのイベント処理を使用すると、エラーが発生します関数呼び出しを登録するクリックで間違っている$(".slides")[y]()このような括弧でそれらをacccessです。 {() `関数スライダ(X、Y){return関数:あなたが代わりに

right.on('click', slider.bind(null, "next", "first")); 
left.on('click', slider.bind(null, "prev", "last")); 
+0

ありがとうございました!これは、基本的には.prevや.nextのようなメソッドをどのように動的に変更するのか、私のもう一つの疑問でした。あなたのブラケット記法とHansイベントハンドラを組み合わせました。しかし、なぜかっこを使用すると "ドット"が追加されますか? – Zach4531

+0

@ Zach4531オブジェクトプロパティにアクセスするには2つの方法があります。ドット記法は値の名前にアクセスします。 current.xを実行すると、 'current'オブジェクトの' x'という名前のプロパティが検索されます。角括弧表記で渡された変数を評価して文字列に変換し、その名前のプロパティにアクセスします – eltonkamami

+1

これは答えに感謝します。私のコードは、私が読むのがはるかに簡単です。多くのコード行を削除しました。 – Zach4531

関連する問題