prototype.jsでイメージのカルーセルを作成するprototype.jsでイメージのカルーセルを作成する前回の続き。prototype.jsでカルーセル(Carousel)を自作してみたくて、試作したもの。 課題であった、
一応これで形にはなった。 残る課題としては、
javascript 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 * 80) + 'px'}); //最初に移動させておく left_move(); }); 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, -80, { duration:0.5, fps:60, delay:0, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); return; } new Effect.MoveBy("mypiclist", 0, -80, { duration:0.5, fps:60, delay:0, beforeStartInternal: function(effect) { //位置移動 $("mypiclist").setStyle('left: 0px'); //先頭の画像を末尾に追加する mysrc.push(mysrc[0]); //先頭画像を削除 mysrc.shift(); //alert(""); //中身を書き換える var strhtml=""; for (i=0; mysrc.length > i; i++){ strhtml = strhtml + "<li><img src=\"" + mysrc[i] + "\" width=\"80\" height=\"60\" style=\"cursor: pointer;\"></li>"; } $("mypiclist").innerHTML=strhtml; }, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); } //右へスライド function right_move(){ //alert($("mypiclist").style.left); if ($("mypiclist").style.left =="-80px"){ //左に動いた後、最初の右へは移動のみ new Effect.MoveBy("mypiclist", 0, 80, { duration:0.5, fps:60, delay:0, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); return; } new Effect.MoveBy("mypiclist", 0, 80, { duration:0.5, fps:60, delay:0, beforeStartInternal: function(effect) { //位置移動 $("mypiclist").setStyle('left: -80px'); //最期の画像を最初に追加する mysrc.unshift(mysrc.last()); //最期の画像を削除 mysrc.pop(); //alert(""); //中身を書き換える var strhtml=""; for (i=0; mysrc.length > i; i++){ strhtml = strhtml + "<li><img src=\"" + mysrc[i] + "\" width=\"80\" height=\"60\" style=\"cursor: pointer;\"></li>"; } $("mypiclist").innerHTML=strhtml; }, afterFinishInternal: function(effect) { //ボタンを押せるようにする can_move=true; } }); } |