※ ChatGPTを利用し、要約された質問です(原文:スライド機能について)
カルーセルを自作する際の注意点とボタンの実装方法
このQ&Aのポイント
スライド機能について勉強のため、カルーセルを自作しています。カルーセルの仕組みや実装方法について詳しく教えていただきたいです。また、ボタンの実装方法やダウンボタンの動作についてもご教示いただきたいです。
カルーセル自作の際、HTML、CSS、JavaScriptのコードを用意しました。カルーセルの幅や高さ、画像の配置などを指定しています。ただ、上向きボタンの実装方法がわからず困っています。上向きボタンをクリックした時に、カルーセルが上にスクロールするようにしたいです。また、見えている画像の枚数や動かす画像の枚数を自由に変えることができるようにしたいです。
現在はダウンボタンの実装は問題なくできていますが、上向きボタンの実装がうまくいっていません。上向きボタンを押すと、上にスクロールするようにしたいです。また、カルーセルの見えている画像の枚数や動かす画像の枚数は変更可能にしたいです。なお、target.find('li').slice(0,moveLength).clone(true)という部分をtargetList.slice(0,moveLength).clone(true)に変更すると正常に動作しないようです。なぜかご教示いただけると助かります。
勉強の為カルーセルを自作しております。
そこで知識のある方に、是非ともお教え頂きたいことがございまして
ご質問させていただきます。
現状私が書いたhtml、css、jsは下記となります。
▼CSS
<style type="text/css">
#Wrap{width:360px; margin:30px auto;}
#Carousel{
width:360px;
height:380px;
padding-top:50px;
padding-bottom:40px;
float:left;
position:relative;
}
#Carousel .Carousel-inner{
height:370px;
overflow:hidden;
}
#Carousel .Carousel-inner ul li{
height:180px;
margin-bottom:10px;
display:block;
}
#btn_up,#btn_down{
position:absolute;
left:165px
}
#btn_up{top:10px;}
#btn_down{bottom:10px;}
▼html
<div id="Wrap" class="clearfix">
<div id="Carousel">
<div class="Carousel-inner">
<div class="CarouselMove">
<ul>
<li><a href="http://www.google.co.jp"><img src="http://placehold.it/360x180/FFE599&text=img1"></a></li>
<li><a href="http://www.google.co.jp"><img src="http://placehold.it/360x180/99F8FF&text=img2"></a></li>
<li><a href="http://www.google.co.jp"><img src="http://placehold.it/360x180/FFC8EC&text=img3"></a></li>
<li><a href="http://www.google.co.jp"><img src="http://placehold.it/360x180/FFC8EC&text=img4"></a></li>
</ul>
</div>
</div>
<a href="#" id="btn_up"><img src="img/up.gif" alt="" width="30" height="30" /></a>
<a href="#" id="btn_down"><img src="img/down.gif" alt="" width="30" height="30" /></a>
</div>
</div>
▼JS
$(function(){
var target = $('#Carousel');
var targetList = target.find('li');
var targetLength = targetList.length;
var showLength = 2;//見えている枚数
var moveLength = 2;//動かす枚数
var itemHeight = targetList.outerHeight(true);//画像一枚の高さ
var moveDistance = itemHeight * moveLength;//一度に動かす量
var moveSpeed = 400;
var easing = 'swing';
var clickFlg = 0;
$('#btn_down').click(function(e){
e.preventDefault();
if(!clickFlg){
clickFlg = 1;
var clone = target.find('li').slice(0,moveLength).clone(true);
clone.appendTo(target.find('li').parent().filter(':last'));
target.find('li:first').stop()
.animate({marginTop : '-=' + moveDistance}, moveSpeed , easing , function(){
target.find('li').slice(0,moveLength).remove();
clickFlg = 0;
});
}else return;
});
});
上記を実行すると問題なく動きます。
ただ、btn_upについてはどのように記述すれば良いかがわからず
教えて頂きたいと思っております。
この考えでダメであれば、代替案をご教示願えれば幸いです。
仕様としましては、今後プラグインにする予定でして、
var showLength = 2;//見えている枚数
var moveLength = 2;//動かす枚数
上記の2点は変更できるようにしたいと思っております。
また、1点現状でも何故こうなるかわからない点がございまして、
var clone = target.find('li').slice(0,moveLength).clone(true);
このtarget.find('li')を変数に格納しているtargetListにすると
動作しなくなってしまいます。何故なのかわからず。。
こちらと併せてご教示いただけませんでしょうか。
お忙しいところ大変恐縮ですが
宜しくお願い致します。
お礼
ご回答いただきありがとうございました! 無事出来ました。本当に感謝しております。 またご相談させていただくかもしれませんが、 宜しくお願い致します。
補足
ご回答本当にどうもありがとうございましました。実際にやってみます!また、やってみて問題なくできれば良いのですが、もしつまづいたらもう一度こちらで質問させて頂きたく、思っております。 ベストアンサーとさせて頂きますが、もう少々お待ちいただければ幸いです。よろしくお願いいたします。