Revealing Module Pattern の方法でより良いコードを書くための提案が必要です。私はチュートリアルhttp://weblogs.asp.net/dwahlin/archive/2011/09/05/creating-multiple-javascript-objects-when-using-the-revealing-module-pattern.aspxに従っています。このパターンの基本を理解する。基本的な画像スライダーを作成しようとしています。jsfiddle リンクを確認してください。
var Slider = window.Slider = window.Slider || {};
Slider = (function($){
var $reelWrap = $('.fnSlider'),
$reel = $('.fnSlider').children('ul'),
$slide = $reel.children('li'),
slideWidth = $slide.width(),
numSlides = $slide.length,
reelWidth = numSlides*slideWidth,
$prev = $('.prev'),
$next = $('.next'),
init = function(){
pageLoad();
nextSlide();
prevSlide();
},
pageLoad = function(){
var index = 2;
$reel.css('width', reelWidth);
$slide.eq(index).addClass('fnActive');
$reel.css('left', -(index*slideWidth));
}
nextSlide = function(){
$next.click(function(e){
e.preventDefault();
var index = $reel.children('.fnActive').index() + 1;
var scroll = index * slideWidth;
if(index < numSlides){
$reel.animate({left: -(scroll)}).children().removeClass('fnActive');
$slide.eq(index).addClass('fnActive');
}else{
$reel.animate({left: 0}).children().removeClass('fnActive');
$slide.eq(0).addClass('fnActive');
}
});
},
prevSlide = function(){
$prev.click(function(e){
e.preventDefault();
var index = $reel.children('.fnActive').index() - 1;
var scroll = index * slideWidth;
var lastScroll = (numSlides-1) * slideWidth;
if(index == "-1"){
$reel.animate({left: -(lastScroll)}).children().removeClass('fnActive');
$slide.eq(-1).addClass('fnActive');
}else{
$reel.animate({left: -(scroll)}).children().removeClass('fnActive');
$slide.eq(index).addClass('fnActive');
}
});
}
return {
init: init
}
})(jQuery);
$(function(){
Slider.init();
});
私が知りたいのは -
1)コードレビュー後に同じカルーセル機能を書くより良い方法はありますか
2) 複数のオブジェクト(インスタンス)の作り方 やってみた -
var slider1, slider2;
slider1 = Slider();
slider2 = Slider();
slider1.init();
slider2.init();
これにより、エラー TypeError: Slider is not a function が発生します
3) グローバル関数とプライベート関数を保持する正しい方法ですか?
4) 提案があれば
お時間をいただきありがとうございます:)