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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

HTML5

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

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

JavaScript

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

Q&A

解決済

2回答

439閲覧

サムネイル画像をクリックしてメイン画像を切り替え、もう一度クリックで画像を消す

help2023

総合スコア1

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

HTML5

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

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

JavaScript

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

0グッド

0クリップ

投稿2023/05/24 06:40

実現したいこと

JS初心者で勉強中です。
サムネイル画像をクリックしたらメイン画像を切り替えるところまではできたのですが、
選択している画像のサムネイル画像をもう一度押したらメイン画像を消すことをやりたいのですがうまくできません。
それと、選択中のサムネイル画像の<li>のタグにactiveのクラスの付与させたいです。

該当のソースコード

<script> var selectimg = document.querySelectorAll('.select-imgsrc'); for (var i =0 ; i < selectimg.length; i++ ) { selectimg[i].onclick = function() { document.getElementById('select-img').src = this.dataset.selectimgsrc; }; } </script>
<div> <img id="select-img" src=""> <!-- ←クリックしたサムネイル画像をここにセット --> </div> <ul> <li class="select-img_list"><img src="selectimg.jpg" class="select-imgsrc" data-selectimgsrc="selectimg.jpg"></li> <li class="select-img_list"><img src="selectimg2.jpg" class="select-imgsrc" data-selectimgsrc="selectimg2.jpg"></li> <li class="select-img_list"><img src="selectimg3.jpg" class="select-imgsrc" data-selectimgsrc="selectimg3.jpg"></li> </ul>

試したこと

googleで色々模索しましたがヒントになるようなものを見つけられませんでした。

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

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

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

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

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

yambejp

2023/05/24 07:29

「メイン画像を消す」の意図がわからないです ふつうメイン画像は表示しっぱなしです
guest

回答2

0

ベストアンサー

「消す」という動作には個人的には賛同しておりませんが、こんなかんじ

javascript

1<script> 2document.addEventListener('click',({target})=>{ 3 if(target.matches('[data-selectimgsrc]')){ 4 const selectImg=document.querySelector('#select-img'); 5 const src=target.dataset.selectimgsrc; 6 selectImg.src=selectImg.src==src?"":src; 7 } 8}); 9</script> 10<div> 11<img id="select-img" src=""> 12</div> 13<ul> 14<li class="select-img_list"><img src="https://placehold.jp/ff0000/00ffff/150x150.png?text=1" class="select-imgsrc" data-selectimgsrc="https://placehold.jp/ff0000/00ffff/400x400.png?text=1"></li> 15<li class="select-img_list"><img src="https://placehold.jp/00ff00/ff00ff/150x150.png?text=2" class="select-imgsrc" data-selectimgsrc="https://placehold.jp/00ff00/ff00ff/400x400.png?text=2"></li> 16<li class="select-img_list"><img src="https://placehold.jp/0000ff/ffff00/150x150.png?text=3" class="select-imgsrc" data-selectimgsrc="https://placehold.jp/0000ff/ffff00/400x400.png?text=3"></li> 17</ul>

調整

javascript

1document.addEventListener('click',({target})=>{ 2 if(target.matches('[data-selectimgsrc]')){ 3 const selectImg=document.querySelector('#select-img'); 4 const src=target.dataset.selectimgsrc; 5 selectImg.src=selectImg.src==src?"":src; 6 document.querySelectorAll('.select-img_list').forEach(x=>x.classList.toggle('active',x==target.closest('.select-img_list') && selectImg.getAttribute('src')!=="")); 7 } 8});

投稿2023/05/24 08:16

編集2023/05/24 08:45
yambejp

総合スコア114784

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

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

help2023

2023/05/24 08:21

ありがとうございます。 動作的には理想通りでございますが、クリックしたサムネイル画像の<li>タグにactiveのクラスが付与されたら理想です。 今クリックしているサムネイル画像にactiveを付与したいです。
yambejp

2023/05/24 08:46

調整版あげました、想定動作とあっていますか?
help2023

2023/05/29 02:17

ありがとうございます。 理想通りの動作になりました。 とても勉強になりました。
guest

0

classList.toggle() でできるかと思います。

js

1if (this.closest('li').classList.toggle('active')) { 2 document.getElementById('select-img').src = ...; 3} else { 4 // ここでメイン画像を消す 5}

投稿2023/05/24 07:18

編集2023/05/24 07:25
int32_t

総合スコア20850

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

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

help2023

2023/05/24 08:16

ありがとうございます。 ご連絡いただいた方法で試したところactiveが付与されましたのですが、 サムネイル画像1をクリックしたらactiveが付与されて、サムネイル画像2をクリックした時にサムネイル画像1に付与されているactiveを消すことはできますでしょうか?
int32_t

2023/05/24 11:58 編集

> サムネイル画像2をクリックした時にサムネイル画像1に付与されているactiveを消す では、この if の前に「this.closest('li') 以外の li.active から active を消す」というコードを入れましょう。こんな感じです: [...document.querySelectorAll('li.active')].filter(li => li != this.closest('li')).forEach(li => li.classList.toggle('active'));
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問