
jQueryでスライドショーを作成したいです。
仕様としては、進むボタンと戻るボタンがあって、どちらかを押すと、画像が前または後ろにスライドして変わります。
ここまではできるんですが、以下のような無限にループさせることができません。
・最後まで行ったときに、進むボタンを押すと、最初の画像が右から現れてスライドし、最初に戻る。
・最初の画像のときに戻るボタンを押すと、最後の画像が左から現れてスライドし、現在地が最後の画像になる。
具体的には、下記サイトのような挙動にしたいです。
http://www.slidesjs.com/
このようなスライドショーの無限ループは、どのように考えれば実現できるのか、どなたかご教授いただけないでしょうか?
No.2ベストアンサー
- 回答日時:
ちゃんと内容を見ていませんが、ul全体の位置をずらしてスライドさせているのだと思います。
循環して表示できるようになさりたいとのことですが、
現状のままだと、最初と最後の要素を連続させようとすると両方を同時に表示(スライド中の表示)できないので、イニシャライズ時にリストの最後に最初の要素をコピーして追加しておきます。
このようにしておくことで、循環する際に必要な全部の状態をスライド表示することが可能になります。
アニメーション部分を自作している場合は、その処理の中でul要素のオフセット値が範囲内に納まるようにmodをとるようにしておけばあとは気にしなくても良くなります。
ご提示のスクリプトでは、ライブラリを使用してアニメーションなさっているようですので、スタート時の表示要素が最初又はコピーした要素(同じもの)を表示中の場合は、アニメーションを開始する前に、次に移動する方向によって表示するオフセットを切替えるようにしておけばよろしいかと思います。
No.1
- 回答日時:
> ここまではできるんですが、以下のような無限にループさせることができません。
出来るというのは、ご自身で実装できるという意味でしょうか?
それともプラグインなど他人の作ったものを使ってできるという意味でしょうか?
ご自身で作れるとというのであれば、それほど難しいことはないと思います。
いずれにしてもソースがないとアドバイスのしようがないと思いますよ。
この回答への補足
>出来るというのは、ご自身で実装できるという意味でしょうか?
その通りです。自分で実装しました。
(そもそも他人のプラグイン等使わずに作ることが目的なので。)
>いずれにしてもソースがないとアドバイスのしようがないと思いますよ。
了解しました。以下にソースを貼らせていただきます。
HTML:
----------------------------------------------------------------
<div id="mainVisualContainer">
<div id="mainVisualWrap">
<ul>
<li><img src="/common/images/mainvisual01.jpg" alt=""></li>
<li><img src="/common/images/mainvisual02.jpg" alt=""></li>
<li><img src="/common/images/mainvisual03.jpg" alt=""></li>
<li><img src="/common/images/mainvisual04.jpg" alt=""></li>
<li><img src="/common/images/mainvisual05.jpg" alt=""></li>
</ul>
</div><!--mainVisualWrap-->
<p class="prevBtn"><a href="#">前へ</a></p>
<p class="nextBtn"><a href="#">次へ</a></p>
<ol id="carouselIndicator">
<li><a class="current" href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
</ol>
</div><!--mainVisualContainer-->
----------------------------------------------------------------
CSS:
----------------------------------------------------------------
#mainVisualContainer{width:100%;position:relative}#mainVisualContainer .prevBtn,#mainVisualContainer .nextBtn{position:absolute;z-index:2;bottom:0}#mainVisualContainer .prevBtn a,#mainVisualContainer .nextBtn a{vertical-align:middle;color:#00ABF4;text-decoration:none}#mainVisualContainer .prevBtn a:before,#mainVisualContainer .nextBtn a:before{content:"";display:block;width:6px;height:6px;position:absolute;top:4px;left:-14px;border-bottom:2px solid #00ABF4;border-right:2px solid #00ABF4;transform:rotate(-225deg);-moz-transform:rotate(-225deg);-webkit-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg)}#mainVisualContainer .prevBtn{left:25px}#mainVisualContainer .nextBtn{right:25px}#mainVisualContainer .nextBtn a:before{transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);left:35px}#mainVisualWrap{width:100%;overflow:hidden;position:relative}#mainVisualWrap ul{position:absolute;top:0;left:0;width:100%}#mainVisualWrap ul li{width:20%;float:left}#mainVisualWrap ul li img{max-width:100%}#carouselIndicator{position:absolute;bottom:14px;left:0;width:100%;height:12px;z-index:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}#carouselIndicator li{display:inline-block}#carouselIndicator li a{display:block;margin:3px;border:1px solid #A7A7A7;border-radius:8px;width:8px;height:8px;background:linear-gradient(to bottom, #a7a7a7 0%,#f0f0f0 60%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0.6, #f0f0f0), color-stop(0, #a7a7a7));color:transparent}#carouselIndicator li a.current{background:linear-gradient(to top, #00aaeb 26%,#5bd2ff 92%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0.92, #00aaeb), color-stop(0.26, #5bd2ff));border:1px solid #0099D3}
----------------------------------------------------------------
すみません。
長過ぎて途中で投稿しちゃったら、編集できなくなっちゃったので、お礼欄にて
javascriptのソースを貼らせていただきます。(cssは貼る必要なかったか・・・)
var $mainVisualContainer = $('#mainVisualContainer');
var $mainVisualWrap = $('#mainVisualWrap');
var $mainVisualWrapUl = $('#mainVisualWrap ul');
var $mainVisualWrapUlLi = $('#mainVisualWrap ul li');
var $carouselIndicatorLi = $('#carouselIndicator li');
var moveDis = 0;//移動距離
var currentNumber = 0;//今何番目にいるか
var imgLen = $('#mainVisualWrap ul li').length;//画像の個数になる
$mainVisualWrapUl.css('width',100*imgLen+'%');
$mainVisualWrapUlLi.css('width',100/imgLen+'%');
$(window).bind('load resize',function(){
moveDis = $mainVisualWrapUlLi.eq(0).width();
console.log(moveDis);
$mainVisualContainer.height(parseInt($mainVisualWrapUlLi.height())+30+'px');
$mainVisualWrap.height(parseInt($mainVisualWrapUlLi.height())+'px');
});
function moveRight(){
$mainVisualWrapUl.stop(true,true).animate({'left': '+='+moveDis+'px'}, 'fast');
currentNumber--;
$carouselIndicatorLi.find('a').removeClass('current');
$carouselIndicatorLi.eq(currentNumber).find('a').addClass('current');
}
function moveLeft(){
$mainVisualWrapUl.stop(true,true).animate({'left': '-='+moveDis+'px'}, 'fast');
currentNumber++;
$carouselIndicatorLi.find('a').removeClass('current');
$carouselIndicatorLi.eq(currentNumber).find('a').addClass('current');
}
$mainVisualContainer.find('.prevBtn a').bind('click',function(){
if(currentNumber > 0){
moveRight();
}
return false;
});
$mainVisualContainer.find('.nextBtn a').bind('click',function(){
if(currentNumber < imgLen-1){
moveLeft();
}
return false;
});
※FirefoxとChromeではちゃんと動くことを確認しました。(IEは全然だめです。それはまた後で考えます。)
※今は、「前へ」と「次へ」のボタンは、それぞれ最初の画像に居る時と最後の画像に居る時は押せないようにしています。本当は掲題のとおり、無限ループさせたいです。
長々と申し訳ないですが、アドバイスいただければと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
- 写真・ビデオ Snowの写真保存について 1 2023/04/06 07:29
- Windows 10 再起動後 Pinが使用できず、PC(windows11)にサインインできない 3 2022/08/30 20:53
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- iOS Gragebandでのみ左クリックが有効にならない 1 2022/08/19 13:18
- JavaScript jsで診断コンテンツのページ内切り替えについて 1 2023/04/14 17:31
- HTML・CSS 画像が分割されて切り替わる、ループアニメーションが作りたい 7 2023/05/27 17:12
- iPhone(アイフォーン) iphoneでネット画像を保存できなくなった 3 2022/06/05 15:58
- Excel(エクセル) excelvbaでスライドショーを作りたい 2 2023/04/20 14:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLで作った時報アプリが動き...
-
ボタンを押したあとに画像を表...
-
jqueryのselect2で検索欄の文字...
-
画面遷移を行わずに同一ページ...
-
二次元配列の全要素の全要素を...
-
React と Electron でデスクト...
-
ソースコードのいじる場所が分...
-
スマホ上で、左右スワイプで次...
-
jsで、配列内の文章を改行する...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
Outlookのアカウントがあるとメ...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サイトでタブをスライドで切り...
-
jQueryを複数設置した場合の優...
-
クラスListにAverage()を追加...
-
jqueryのプラグインのjquery.jc...
-
jQueryのアコーディオンメニュ...
-
アコーディオンで多階層のメニ...
-
jQuery 隣接セレクタ
-
jQueryで複数あるUL要素の最後...
-
jQueryでスライドショー作成(無...
-
Superfishの最終項処理について
-
Jcarousel 複数設置
-
アコーディオンメニューの最初...
-
jqueryで作ったアコーディオン...
-
CSSプルダウンメニューとjQuery...
-
同一ページ移動時ハンバーガー...
-
jqueryで開閉メニューの状態をc...
-
jqueryのslideUpについて質問で...
-
アナログ時計の画像の回転
-
jQueryプラグインが動かない
-
Javascriptを使ってQRコード読...
おすすめ情報