次のアプローチでは、より正式なコンストラクター関数とプロトタイプを使用して、エンクロージャーをスタックするのではなく、非常に軽量に保ちます。コンストラクターは...
function Slider(slides, transition) {
// Keeps a reference to the current slide index
this._current = 0;
// An array of slides
this._slides = slides;
// A transition function
this._transition = transition;
}
スライドの配列と、それらの間を移動するときに2つのスライドが与えられる関数を受け入れます。これは、トランジション効果を外部化することで制御し続けることを意味します。また、フレームワークに依存せず、jQueryやその他のフレームワークへの依存関係はありません。コンストラクター自体はあまり機能しません。次の方法は私たちの肉です...
// The function that swaps slides
Slider.prototype.goto = function(i) {
// Do a bit of sense checking
if(i > this._slides.length || i < 0)
throw new Error("Slide does not exist");
// Swap the slides by passing them to the transition function
var currentSlide = this._slides[this._current];
var nextSlide = this._slides[i];
this._transition(currentSlide, nextSlide);
// Update the current index
this._current = i;
};
スライドの新しいインデックスを取得し、古いスライドと新しいスライドを遷移関数に渡します。次に、現在のスライドの追跡に使用するインデックスを更新します。次に、回転する前と次の関数を実装する必要があるため、次のメソッドでは、モジュラスを使用してそれを行う方法を説明します。負のモジュラスはこの関数で希望どおりに機能しないため、スライドの長さを追加する必要があることに注意してください。
// Calculate the next index as a rotating index
Slider.prototype.getNextIndex = function() {
return (this._current + 1) % this._slides.length;
};
// Calculate the previous index as a rotating index
Slider.prototype.getPrevIndex = function() {
return (this._current + this._slides.length - 1) % this._slides.length;
};
次に砂糖を加えます...
// Sugar to go next and prev
Slider.prototype.next = function() {
this.goto(this.getNextIndex());
};
Slider.prototype.prev = function() {
this.goto(this.getPrevIndex());
};
前のボタンと次のボタンをスライダーに関連付ける際に問題が発生する可能性があります。スライダー要素の前後でそれらを見つけることができます。または、以下で行ったように、スライダー要素にそれらを含めることができます。jQueryを使用してスライダーを設定するには、次のようにします...
$(".slider").each(function() {
var slider = new Slider($(this).find(".slide"), function(a, b) {
$(a).hide();
$(b).show();
});
$(this).data("slider", slider);
$(this).find(".prev").click(function() {
slider.prev();
});
$(this).find(".next").click(function() {
slider.next();
});
});
編集これが実際の動作ですhttp://jsfiddle.net/w8u69/
Slider
また、トランジションのロジックが公開されているため、元の「クラス」を変更することなく、トランジション効果を非常に簡単に追加できます。http://jsfiddle.net/w8u69/1/
編集元のスライダーの「クラス」を変更せずに、このアプローチのパワーを示すために、スライド間を自動的に移動するロジックを追加できます。これはデコレータまたは継承を使用して実行できますが、この例は、コンポジションを使用して実行する方法を示しています。http://jsfiddle.net/w8u69/4/
最後にもう1つ、これは純粋なOOアプローチでおそらく最も重要なことです。統合コードを変更し、OOの「クラス」をそのままにしておくことで、スライダー用に作成したロジックを再利用して、まったく異なるものにプラグインできます。フレームワーク。このフィドルは、MooToolsで動作していることを示していますhttp://jsfiddle.net/w8u69/5/