jQueryでスライドショー作成(無限ループ)

このQ&Aのポイント
  • jQueryを使用してスライドショーを作成する方法について教えてください。要件としては、進むボタンと戻るボタンがあり、押すと画像がスライドして変わることです。
  • ただし、最後の画像まで表示した後に進むボタンを押すと最初の画像に戻り、最初の画像の時に戻るボタンを押すと最後の画像に移動するような無限ループの実現方法についても知りたいです。
  • 具体的な挙動としては、以前に見たスライドショーと同様に、進むボタンと戻るボタンがありますが、最後の画像に到達した場合には進むボタンを押すと最初の画像に戻り、最初の画像の時に戻るボタンを押すと最後の画像に移動します。
回答を見る
  • ベストアンサー

jQueryでスライドショー作成(無限ループ)

jQueryでスライドショーを作成したいです。 仕様としては、進むボタンと戻るボタンがあって、どちらかを押すと、画像が前または後ろにスライドして変わります。 ここまではできるんですが、以下のような無限にループさせることができません。 ・最後まで行ったときに、進むボタンを押すと、最初の画像が右から現れてスライドし、最初に戻る。 ・最初の画像のときに戻るボタンを押すと、最後の画像が左から現れてスライドし、現在地が最後の画像になる。 具体的には、下記サイトのような挙動にしたいです。 http://www.slidesjs.com/ このようなスライドショーの無限ループは、どのように考えれば実現できるのか、どなたかご教授いただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

ちゃんと内容を見ていませんが、ul全体の位置をずらしてスライドさせているのだと思います。 循環して表示できるようになさりたいとのことですが、 現状のままだと、最初と最後の要素を連続させようとすると両方を同時に表示(スライド中の表示)できないので、イニシャライズ時にリストの最後に最初の要素をコピーして追加しておきます。 このようにしておくことで、循環する際に必要な全部の状態をスライド表示することが可能になります。 アニメーション部分を自作している場合は、その処理の中でul要素のオフセット値が範囲内に納まるようにmodをとるようにしておけばあとは気にしなくても良くなります。 ご提示のスクリプトでは、ライブラリを使用してアニメーションなさっているようですので、スタート時の表示要素が最初又はコピーした要素(同じもの)を表示中の場合は、アニメーションを開始する前に、次に移動する方向によって表示するオフセットを切替えるようにしておけばよろしいかと思います。

bvv80716
質問者

お礼

正直仰ってること全て理解できたわけではありませんが、何とか実現できました。 ありがとうございました。

その他の回答 (1)

  • tracer
  • ベストアンサー率41% (255/621)
回答No.1

> ここまではできるんですが、以下のような無限にループさせることができません。 出来るというのは、ご自身で実装できるという意味でしょうか? それともプラグインなど他人の作ったものを使ってできるという意味でしょうか? ご自身で作れるとというのであれば、それほど難しいことはないと思います。 いずれにしてもソースがないとアドバイスのしようがないと思いますよ。

bvv80716
質問者

お礼

すみません。 長過ぎて途中で投稿しちゃったら、編集できなくなっちゃったので、お礼欄にて 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は全然だめです。それはまた後で考えます。) ※今は、「前へ」と「次へ」のボタンは、それぞれ最初の画像に居る時と最後の画像に居る時は押せないようにしています。本当は掲題のとおり、無限ループさせたいです。 長々と申し訳ないですが、アドバイスいただければと思います。

bvv80716
質問者

補足

>出来るというのは、ご自身で実装できるという意味でしょうか? その通りです。自分で実装しました。 (そもそも他人のプラグイン等使わずに作ることが目的なので。) >いずれにしてもソースがないとアドバイスのしようがないと思いますよ。 了解しました。以下にソースを貼らせていただきます。 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} ----------------------------------------------------------------

関連するQ&A

  • JQueryを使ったオートスライドショーについて

    Webサイトを作っているのですが、トップページにフェード効果のあるスライドショーを自動切り替えしたいと思っております。 とりあえず今日JQueryをダウンロードしたのですが、JQueryだけではスライドショーの機能を付けるのは難しいのでしょうか? それともスライダー用のJQueryプラグインを使う必要があるのでしょうか? JQueryだけでスライドショーを実現したほうが良いのか、プラグインを使ってスライドショーを実現した方が良いのか、どちらが良いのでしょうか? 双方のメリットやデメリットがあれば教えて下さい。

  • JQueryのスライドショーを停止させたい

    サイトの背景画像のスライドショーを「VEGAS BACKGROUND JQUERY PLUGIN」を利用して行いたいのですが、スライドショーを1回で停止(ループさせない)ようにしたいのです。 どこをいじってもうまくいかなく困っています。 お教えいただけないでしょうか? http://vegas.jaysalvat.com/ (SLIDE SHOWを利用しています。) よろしくおねがいします。

  • jqueryでスライドショーができない。。

    jqueryでスライドショーを完成させたいのですが、 以下の記述ではページを読み込むと最初の1枚目の画像が現れて、 消えたところで止まってしまいます。 この動作を繰り返して次々と画像を変えていきたいのですが、 どう修正すれば動くでしょうか? お分かりの方、ご教授ください><; よろしくお願いします。

  • jQueryでスライドショーを作っているのですが

    jQueryを使用し、下記URLの様な画像がスライドショーになるサイトを製作しているのですが、 (http://maxb.net/scripts/jbgallery-2.0/docs/nomenu.html) JavaScrip初心者の為、スライドショーを最後の画像でストップするやり方が分からず 困っております。 スライドショーにはjbgallery-2.0.jsといファイルを使用しております。 (ファイルを製作された方のサイトはこちら:http://maxb.net/scripts/jbgallery-2.0/) スライドショーが最後の一枚でストップする方法をおわかりの方がいらっしゃいましたら、 ぜひ教えていただきたいと思っております。 ご教授のほど、何卒よろしくお願いいたします。

  • スクロールスライドショー

    https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js を使って モニター横100%で画像のスライドショーを作りたいのですが、 高さは300pxくらいで、3枚表示され、マウス操作かボタンクリックで右や左の画像に代わっていく ご指導お願いいたします。

  • スライドショーを自動ループにしたい

    サムネイルつきのスライドショーを作りたいと思っています。 本当はページを開けたら自動的にスライドショーがはじまるのが理想なのですが、ボタンを押してスライドショー開始でもよく、サムネイルの画像をクリックすると、またそこからはじまるようにしたいです。 参考にしているHPが http://himajin.moo.jp/freejava/imgchange/imgview3.html なのですが、チェックボックスを入れたくありません。自動でエンドレスループしてほしいです。 どうやってはずしたらいいのでしょうか? 色々試してみましたが、動かなくなってしまいます。 それとボタンを<input type="button">になってるのをjpg画像のボタンにしたかったのですが、これも変えるのがうまくいきません。 ボタンを変えることは可能でしょうか? おしえてください。 よろしくお願いします。

  • jQueryのスライドショーのカスタマイズについて

    仕事であるサイトを作っているのですが、製品ページの所で製品画像をスライドショーにして実装しようと思っており、jQueryで理想に近いプラグイン(galleriaというものです)を発見したのですが、スライドショーの領域内でさらに拡大画像ができるようにしてほしいと言われ自分でカスタマイズしようとやってみましたがうまくできません。 皆様のお力をお貸しいただけないでしょうか。 ■galleriaのプラグインを使ってカスタマイズする内容 galleriaのサイトからファイルをダウンロードし(http://galleria.aino.se/download/)メイン画像(サムネイルの上にある画像)内、もしくは外に「拡大画像」というボタンを設置し、クリックするとモーダルウィンドウで拡大画像が表示されるようにしたい。 ■自分でうまくできないところ このプラグインはサムネイル、もしくは左右にある矢印をクリックすると画像が変わる仕様になっており、「拡大画像」ボタンに今表示されているメイン画像を判別させて拡大画像を表示させる処理が必要となると思うのですが、うまくいきません。 モーダルウィンドウはthick.box(http://jquery.com/demo/thickbox/)を使って表示させています。 その他に、もっと簡単にできる方法など教えていただければ助かります。 よろしくお願いいたします。

  • JQueryでサムネ付スライドショークロスフェード

    JQueryでクリックを使用せず、自動クロスフェードのサムネイル付きスライドショー&マウスオーバーでもクロスフェードで切り替わるようにするためにはどうすればよいでしょうか? 更にはスライドショーにキャプションがつけられたら最高です。 スライドショーの幅はwidth: 354px; height: 280px;、サムネイルはその下に縦3つ、横3つの計9つ配置します。 スライドショーは自動フォロスフェードによるループ、またサムネイルをマウスオーバーでもその画像にクロスフェードイン、その際スライドショー内に表示されている&マウスオーバーされているサムネイルの画像は罫で仕切るか、半透明がクリアに表示されるといった処理を考えております。 恥ずかしながら調べても分からなかったので、皆さまの知識を拝借したく投稿させて頂きました。 恐れ入りますが、何卒ご助言下さいますよう、よろしくお願い致します。

  • jQueryのプラグイン「Skitter」について

    下記サイトで配布されているjQueryのプラグイン「Skitter」について、 質問させて下さい。 http://thiagosf.net/projects/jquery/skitter/ スライドショー用にjQueryの良いプラグインはないかと探して見つけたのが、 このSkitterで、実装も簡単だしアニメーションのエフェクトも多彩で、お気に入りです。 質問は、スライドショーが無限にループしてしまうのを、 最後の画像がきたところで、ストップさせる、 というカスタマイズが出来ないかという事です。 ファイルの中身を見たり、検索エンジンも使ってみましたが、 答えが見つけられず、思い切って質問してみました。 わかる方いらっしゃいましたら、ぜひお教え願いたいと思ってます。 よろしくお願いしますm(_ _)m

  • スライドショーなどずっと繰り返す処理

    https://okwave.jp/qa/q9339175.html の続き スライドショーなどずっと繰り返す処理ってよくありますよね。 その様な場合配列のインデクス番号を初期化してやらないと、一度画像を回って最後のがぞうで止まってしまうと思うのですが、 また繰り返すためにはどうすればいいのでしょうか? 初期化すると必然的に無限ループになりませんか? 教えていただけませんでしょうか?

専門家に質問してみよう