jQueryのスライドショーのイベントバインドと処理を分けて実装しています。
slider関数の中に変数とfor文を入れるとコンソールでエラーは出なかったのですが、右にクリックしたときに1つしかスライドしませんでした。
なぜ変数とfor文をslider関数の中に入れてしまうと動作できないのかを教えていただきたいです。
具体的にやりたいことは、ボタンをクリックしたときにslider関数を読み込むようにしたいです。
html
1<!doctype html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> 6<meta name="format-detection" content="telephone=no"> 7<title></title> 8<link rel="stylesheet" href="css/reset.css"> 9<link rel="stylesheet" href="css/base.css"> 10<link rel="stylesheet" href="css/style.css"> 11</head> 12<body> 13<div class="wrapper"> 14 <div class="slider-wrap"> 15 <div class="slider-area"> 16 <ul class="slider-list clearfix"> 17 <li><img src="http://placehold.jp/150x150.png" alt=""></li> 18 <li><img src="http://placehold.jp/3d4070/ffffff/150x150.png" alt=""></li> 19 <li><img src="http://placehold.jp/150x150.png" alt=""></li> 20 <li><img src="http://placehold.jp/3d4070/ffffff/150x150.png" alt=""></li> 21 </ul> 22 <button type="button" class="slider-ctrl-btn prev" data-ctrl="prev"></button> 23 <button type="button" class="slider-ctrl-btn next" data-ctrl="next"></button> 24 </div> 25 </div> 26</div> 27<script type="text/javascript" src="js/jquery.js"></script> 28<script type="text/javascript"> 29/* slider-list→空の配列 30* sliderClickCount→クリックしたときの初期の値 31* btn→ボタンの引数 32*/ 33$(function(){ 34 $(".slider-wrap").find(".slider-ctrl-btn").on("click",function(){ 35 sliderDirection=$(this).data("ctrl"); 36 slider(sliderDirection); 37 }); 38 39 function slider(btn){ 40 var sliderList=[]; 41 var sliderClickCount=0; 42 43 for(i=0; i < $(".slider-list").find("img").length; i++){ 44 sliderList[i]=-i*$(".slider-list").find("img").width() 45 } 46 47 switch(btn){ 48 case"next":if(sliderClickCount<$(".slider-list").find("img").length-1){ 49 sliderClickCount++ 50 }else{ 51 sliderClickCount=0 52 } 53 break; 54 case"prev":if(sliderClickCount!=0){ 55 sliderClickCount--}else{ 56 sliderClickCount=$(".slider-list").find("img").length-1 57 } 58 break; 59 default:break 60 } 61 $(".slider-wrap").find(".slider-list").animate({left: sliderList[sliderClickCount]},500) 62 } 63}); 64</script> 65</body> 66</html>
css
1.slider-wrap { 2 width: 600px; 3 padding: 10px; 4 margin: 0 auto; 5 border-radius: 10px; 6 background-color: #DDD; 7 box-shadow: 0 2px 5px rgba(50, 50, 50, 0.4); 8} 9.slider-area { 10 position: relative; 11 width: 600px; 12 height: 300px; 13 background-color: #FFF; 14 overflow: hidden; 15} 16.slider-list { 17 position: absolute; 18 top: 0; 19 left: 0; 20 width: 2400px; 21 height: 300px; 22} 23.slider-list > li { float: left; } 24.slider-ctrl-btn { 25 position: absolute; 26 top: 50%; 27 width: 30px; 28 height: 30px; 29 margin-top: -15px; 30 cursor: pointer; 31 border-radius: 15px; 32 background-color: rgba(255, 255, 255, 0.5); 33} 34.slider-ctrl-btn.prev { left: 30px; } 35.slider-ctrl-btn.next { right: 30px; }
CSSが提示されていないので挙動が確認できません
CSS追記しました。
大変失礼いたしました。
回答1件
あなたの回答
tips
プレビュー