質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

2084閲覧

スライダーのループ処理

Naotimu

総合スコア12

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/04/08 22:45

編集2019/04/09 06:37

前提・実現したいこと

Jquery初心者です。

課題でJquery、プラグインなしでスライダーを作っています。
スライダーは自動再生し、五秒毎に切り替わり、
右、左ボタンでもコントロールできるようにしたいです。

ボタンでのコントロールはうまくいったのですが、
自動再生に問題があります。

スライドが最後までいった時、最初のスライドを最後のスライドの後ろにつけて、
ループにしたいのですがうまくいきません。

あと、冒頭部分でインジゲーター(class:pagination)のa要素をjqueryで追加しているのですが、追加されたa要素の前にundefinedが出て、肝心のインジゲーターが存在していますが表示されません。

該当のソースコード

HTML

1<body> 2 <div class="container-fluid"> 3 <section class="row" id="slider"> 4 <div class="col-md-12 slide-container"> 5 <div class="col-md-12 slide" id="slide06"></div> 6 <div class="col-md-12 slide" id="slide01"></div> 7 <div class="col-md-12 slide" id="slide02"></div> 8 <div class="col-md-12 slide" id="slide03"></div> 9 <div class="col-md-12 slide" id="slide04"></div> 10 <div class="col-md-12 slide" id="slide05"></div> 11 </div> 12 <div class="slider-navi"> 13 <a href="#" class="arrow next"><i class="fas fa-arrow-right"></i></a> 14 <a href="#" class="arrow prev"><i class="fas fa-arrow-left"></i></a> 15 </div> 16 <div class="pagination"></div> 17 </section>

CSS

1.container-fluid, .row, .col-md-12{ 2 margin:0; 3 padding: 0; 4} 5 6#slider { 7 height: 500px; 8 width: 100%; 9 position: relative; 10 overflow: hidden; 11 color:#fff; 12} 13 14.slide-container { 15 width: 600%; 16 height: 100%; 17 display: flex; 18 position: absolute; 19 z-index: 0; 20 left: -100%; 21} 22 23.slider-navi a, 24.pagination a { 25 overflow: hidden; 26} 27 28.slider-navi a.disabled{ 29 display: none; 30} 31 32.arrow { 33 z-index: 10; 34 cursor: pointer; 35 position: absolute; 36 bottom: 30px; 37 color: #FFF; 38 font-size: 1.4em; 39 border: solid 1px #FFF; 40 padding: 8px; 41} 42 43.next { 44 position: absolute; 45 right: 25px; 46} 47 48.prev { 49 position: absolute; 50 left: 25px; 51} 52 53.pagination { 54 position: absolute; 55 bottom: 30px; 56 left: 50%; 57 margin-left: -50px; 58 width: 100px; 59 z-index: 30; 60} 61 62.pagination a { 63 float: left; 64 margin: 5px 5px 0; 65 width: 10px; 66 height: 10px; 67 background: #eee; 68 vertical-align: middle; 69} 70 71.pagination a.active{ 72 cursor: default; 73} 74 75.pagination a.active:before{ 76 margin-left: -130px; 77} 78

Jquery

1 2let slider, slideContainer, slides, nav, pagination, imgNumber, animationSpeed, interval, currentSlide, paginationHtml, timer; 3 4var $slider = $('#slider'), // on cible le bloc du slider 5 $slideContainer = $slider.find('.slide-container'), 6 $slides = $slideContainer.find('.slide'), 7 8 $nav = $slider.find('.slider-navi'), 9 $pagination = $slider.find('.pagination'), 10 11 $slideLength = $slides.length, 12 $currentSlide = 1, 13 $paginationHtml = '', 14 i = 0; 15 16slides.each(function(i) { 17 paginationHtml += '<a href="#">' + ( i + 1) + '</a>'; 18 }); 19 $pagination.html(paginationHtml); 20 21const maSlider = { 22 23 clickBouton: function(){ 24 $('.prev').on('click', function(){ 25 //event.preventDefault(); 26 $slideContainer.animate({'left': '0'},300, function(){ 27 $(this).css('left','-100%'); 28 $('.slide').first().before($('.slide').last()); 29 }); 30 }); 31 32 $('.next').on('click', function(){ 33 //event.preventDefault(); 34 $slideContainer.animate({'left': '-200%'},300, function(){ 35 $(this).css('left','-100%'); 36 $('.slide').last().after($('.slide').first()); 37 }); 38 }); 39 40 $pagination.on('click', function(event){ 41 event.preventDefault(); 42 if($('.pagination a').hasClass('active')){ 43 startSlider($(this).index()); 44 } 45 }); 46 }, //clickBouton 47 48 startSlider: function(){ 49 timer = setInterval(function(){ 50 let large = $slider.width(); 51 52 $slideContainer.animate({'margin-left': '-='+large}, function(){ 53 currentSlide++; 54 if (currentSlide === $slides.length){ 55 currentSlide = 1; 56 57 let lastSlide = $slides.first(); 58 $slideContainer.append(lastSlide); 59 60 let lastSlidePosition = large * ($slideLength -1); 61 lastSlide.css('left', `${ lastSlidePosition }px`); 62 63 for(var i = 1; i < $slideLength; i++){ 64 let slide = currentSlide.eq(i); 65 const slidePosition = large * (i-2); 66 slide.animate({left: `${ slidePosition }px`}, 5000); 67 } 68 69 const movedLastSlidePosition = large * ($slideLength - 2) 70 lastSlide.animate({left: `${ movedLastSlidePosition }px`}, 5000) 71 } 72 }); 73 }, 5000); 74 }, 75 76 stopSlider: function(){ 77 clearInterval(); 78 }, 79 80 $slider.on({ 81 mouseenter: stopTimer, 82 mouseleave: startSlider 83 }); 84}; 85//}) 86 87maSlider.startSlider(); 88maSlider.stopSlider(); 89maSlider.clickBouton();

試したこと

散々、いろんなネットの情報やら本を見てやってみたのですが、どうしても解決できません。
助けてください。よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/04/09 01:42

(質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
Naotimu

2019/04/10 08:36

回答ありがとうございます。このコードでは、エラーは出なかったのですが、スライドも自分が思っているようには起動しませんでした。あれから、色々見直して、大幅にコードを書き直し、思うようなところまでいけました。また、機会があればよろしくお願いします。
kei344

2019/04/10 08:53

まだ質問が「受付中」になっていますが、どのように解決したのかを回答文に書き、「解決済」にされてはいかがでしょうか。
guest

回答2

0

自己解決

サイトのコードを参考にほぼコードを書き直しました。
最初のコードと比較すると、少しずついろんなものが不足していました。

まだ最後のスライドから最初のスライドに移る動作がカクカクするのが気になりますが、
とりあえず動きました。
回答いただいた方、ありがとうございました。

投稿2019/04/10 20:09

Naotimu

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

おそらくの回答ですがjQueryのコードの一部変に囲まれている部分があります。
“と"や’`と'などの間違いでは?
解決しなかったらすみません...

投稿2019/04/08 22:51

編集2019/04/08 22:53
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Naotimu

2019/04/10 08:38

回答ありがとうございます。正しいかどうかは分かりませんが、細かい部分の修正ではなかったようです。結局、ほぼ書き直して、うまくいきました。
退会済みユーザー

退会済みユーザー

2019/04/10 09:12

そうですか、それは良かったです。 それでは自己解決をお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問