prototype.jsとjQueryでカルーセルを作成するprototype.jsとjQueryでカルーセルを作成する前回の続き。prototype.jsでカルーセル(Carousel)を自作してみたくて、試作したもの。 課題であった、
残る課題としては、
今回はここまで。 javascript //jQueryと併用するので最初に実行 jQuery.noConflict(); var mysrc=[];//画像パスが入る配列 var i=0; var can_move=true; //ロード時のイベント Event.observe(document, "dom:loaded", function(){ //alert(""); var myli=$("mypiclist").getElementsByTagName("img"); //alert(myli[0].src); for (var i=0; myli.length > i;i++){ mysrc.push(myli[i].src);// 画像パスだけ取得 } Event.observe($("move_left"), "click", mover_handler); //Event.observe($("mypiclist"), "click", mover_handler); Event.observe($("move_right"), "click", m_right_handler); //画像枚数によって幅を変える $("mypiclist").setStyle({width: + (mysrc.length * 90) + 'px'}); //リフレクト効果 var imglist = jQuery("#mypiclist img"); imglist.reflect({height:0.4,opacity:0.5}); //最初に移動させておく left_move(); //alert(""); }); function mover_handler(e){ //イベント元のアイテム取得 //var it = e.element(); //二重クリック防止 if (can_move == false){ return; } can_move=false; left_move(); //alert("");//デバグ用 } function m_right_handler(e){ //二重クリック防止 if (can_move == false){ return; } can_move=false; right_move(); } //左へ移動 function left_move(){ //alert($("mypiclist").style.left); if ($("mypiclist").style.left =="0px"){ //右に動いた後、最初の左へは移動のみ new Effect.MoveBy("mypiclist", 0, -200, { duration:0.5, fps:60, delay:0, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); return; } new Effect.MoveBy("mypiclist", 0, -200, { duration:0.5, fps:60, delay:0, beforeStartInternal: function(effect) { //位置移動 $("mypiclist").setStyle('left: 0px'); //var myli=$("mypiclist").getElementsByTagName("li"); var myli=$A($("mypiclist").getElementsByTagName("li")); myli.push(myli[0]);//先頭の画像を末尾に追加する myli.shift();//先頭画像を削除 myli.push(myli[0]); //先頭の画像を末尾に追加する myli.shift();//先頭画像を削除 var strH=""; for (var i=0; myli.length >i;i++){ strH = strH + "<li>" +myli[i].innerHTML + "</li>"; } $("mypiclist").update(strH); //alert(Prototype.Browser) if (Prototype.Browser = "Gecko"){ //firefoxでは必要 IE8不要 var imglist = jQuery("#mypiclist img"); imglist.reflect({height:0.4,opacity:0.5}); } }, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); } //右へスライド function right_move(){ //alert($("mypiclist").style.left); if ($("mypiclist").style.left =="-200px"){ //左に動いた後、最初の右へは移動のみ new Effect.MoveBy("mypiclist", 0, 200, { duration:0.5, fps:60, delay:0, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); return; } new Effect.MoveBy("mypiclist", 0, 180, { duration:0.5, fps:60, delay:0, beforeStartInternal: function(effect) { //位置移動 $("mypiclist").setStyle('left: -180px'); var myli=$A($("mypiclist").getElementsByTagName("li")); myli.unshift(myli.last());//最期の画像を最初に追加する myli.pop();//最期の画像を削除 myli.unshift(myli.last());//最期の画像を最初に追加する myli.pop();//最期の画像を削除 var strH=""; for (var i=0; myli.length >i;i++){ strH = strH + "<li>" +myli[i].innerHTML + "</li>"; } $("mypiclist").update(strH); //alert(Prototype.Browser) if (Prototype.Browser = "Gecko"){ //firefoxでは必要 IE8不要 var imglist = jQuery("#mypiclist img"); imglist.reflect({height:0.4,opacity:0.5}); } }, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); } |