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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1372閲覧

Javascriptのスライドショーでループさせたい

Kenthe-C

総合スコア2

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/08/16 10:02

前提・実現したいこと

javascriptで、「<」もしくは「>」ボタンを押すと前もしくは次に進むスライドショーを作りました。配列に画像を配置していて、最後まで行くと1枚目の写真に戻るようにしたいです。

発生している問題

配列に入れている最後の写真が表示されず、最後から二番目の写真の次に、配列の最初の写真に戻ってしまう

該当のソースコード

html

1<div> 2 <img src="images/blank.png" alt="" id="background"> 3</div>

javascript

1<script> 2 const backgroundImage = ['images/blank.png', 'images/background2.png', 'images/background3.png', 'images/background4.png', 'images/background5.png']; 3 4 let current = 0; 5 6 function changeImage(num) { 7 if(current + num >= 0 && current + num < backgroundImage.length) { 8 current += num; 9 document.getElementById('background').src = backgroundImage[current]; 10 } 11 if(current + num >= backgroundImage.length) { 12 current = 0; 13 document.getElementById('background').src = backgroundImage[current]; 14 } 15 }; 16 17 document.getElementById('prev').onclick = function() { 18 changeImage(-1); 19 }; 20 document.getElementById('next').onclick = function() { 21 changeImage(1); 22 }; 23 document.getElementById('change').onclick = function() { 24 changeImage(1); 25 }; 26</script>

試したこと

上記のように、current + num >= backgroundImage.lengthの時にcurrentの値を0に書き換えることで、配列の初めに戻せると思って試しました。初めに戻せるのはいいのですが、配列の最後の写真が表示されなくなってしまいます。

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

プログラミング初心者です。できるだけ易しく教えていただけると嬉しいです。なにか抜けているところがあればご指摘ください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

changeImage() を以下のようにしてみてください。

javascript

1 function changeImage(num) { 2 if(current + num >= 0 && current + num < backgroundImage.length) { 3 current += num; 4 document.getElementById('background').src = backgroundImage[current]; 5 } 6 else if(current + num >= backgroundImage.length) { 7 current = 0; 8 document.getElementById('background').src = backgroundImage[current]; 9 } 10 else if(current + num < 0) { 11 current = backgroundImage.length - 1; 12 document.getElementById('background').src = backgroundImage[current]; 13 } 14 }; 15

一つ目の if が真となったのちに、二つ目の if も評価してしまっていたのが不具合の原因です。
また、先頭の画像を表示してる際に PREV をクリックした処理がありませんでしたので追加しました。

投稿2020/08/17 11:23

saoyagi2

総合スコア210

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

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

Kenthe-C

2020/08/17 12:24

なるほど!解決しました。わかりやすいご説明ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問