teratail header banner
teratail header banner
質問するログイン新規登録
SCSS

SCSSは、SassのCSSメタ言語です。Webページのスタイルを指定するCSSを効率的に記述することができます。ネストと呼ばれる入れ子構造で記述するため、CSSの全体の記述量を減らせる点が特徴です。さらに変数も利用できるため、変更や修正の際に少ない作業量で対応することもできます。

HTML5

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

JavaScript

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

CSS

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

Q&A

解決済

1回答

466閲覧

静的サイトに設置したaudioタグに関連する挙動について

kizunami

総合スコア19

SCSS

SCSSは、SassのCSSメタ言語です。Webページのスタイルを指定するCSSを効率的に記述することができます。ネストと呼ばれる入れ子構造で記述するため、CSSの全体の記述量を減らせる点が特徴です。さらに変数も利用できるため、変更や修正の際に少ない作業量で対応することもできます。

HTML5

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

JavaScript

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

CSS

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

0グッド

1クリップ

投稿2022/01/20 05:51

0

1

説明力不足によりややこしくしてしまっていたらすみません。
解決策がお分かりの方、お力いただけますと幸いです。

概要

・静的サイトにaudioタグで2つのmp3を再生させたいと思い以下コードを作成しました。
・hoverで背景を #E36D3E にした際に、再生のボタン画像(.svg)とテキストを白に変化させる動きをつけたいが、うまくいかない

html

1<div class="voice ja"> 2 <audio id="bgm1"> 3 <source src="images/voice_ja.mp3" type="audio/wav"> 4 </audio> 5 <!-- 再生ボタン --> 6 <div id="btn-play" type="button"> 7 <img src="images/voice.svg" class="play"><img src="images/play_white.svg" class="play-white"><span>音声1</span> 8 </div> 9</div> 10<div class="voice"> 11 <audio id="bgm2"> 12 <source src="images/voice_en.mp3" type="audio/wav"> 13 </audio> 14 <div id="btn-play2" type="button"> 15 <img src="images/voice.svg"><span>音声2</span> 16 </div> 17</div> 18

scss

1.voice{ 2 width: 330px; 3 background: rgb(97 86 83 / 30%); 4 padding: 12px 15px; 5 margin-top: 15px ; 6 img{ 7 vertical-align: middle; 8 margin-right: 14px; 9 width: 26px; 10 height: 26px; 11 } 12 span{ 13 font-size: 12px; 14 line-height: 17px; 15 letter-spacing: 0.1em; 16 } 17 .play-white{ 18 display: none; 19 } 20 &:hover{ 21 background: #E36D3E; 22 span{ 23 color: #fff; 24 } 25 .play{ 26 display: none; 27 } 28 .play-white{ 29 display: inline-block; 30 } 31 } 32} 33

JavaScript

1$(function(){ 2 3 const bgm1 = document.querySelector("#bgm1"); // <audio> 4 const btn1 = document.querySelector("#btn-play"); // <button> 5 const bgm2 = document.querySelector("#bgm2"); // <audio> 6 const btn2 = document.querySelector("#btn-play2"); // <button> 7 8 btn1.addEventListener("click", ()=>{ 9 // pausedがtrue=>停止, false=>再生中 10 if( ! bgm1.paused ){ 11 btn1.innerHTML = '<img src="images/voice.svg">'+'<span>音声1</span>'; // 「再生ボタン」に切り替え 12 bgm1.pause(); 13 } 14 else{ 15 btn1.innerHTML = '<img src="images/pause.svg">'+'<span>音声1</span>'; // 「一時停止ボタン」に切り替え 16 bgm1.play(); 17 } 18 }); 19 20 btn2.addEventListener("click", ()=>{ 21 // pausedがtrue=>停止, false=>再生中 22 if( ! bgm2.paused ){ 23 btn2.innerHTML = '<img src="images/voice.svg">'+'音声2</span>'; // 「再生ボタン」に切り替え 24 bgm2.pause(); 25 } 26 else{ 27 btn2.innerHTML = '<img src="images/pause.svg">'+'音声2</span>'; // 「一時停止ボタン」に切り替え 28 bgm2.play(); 29 } 30 }); 31 32 33 bgm1.addEventListener("ended", ()=>{ 34 bgm1.currentTime = 0; // 終了時再生位置を先頭に移動 35 btn1.innerHTML = '<img src="images/voice.svg">'; // 「再生ボタン」に変更 36 }); 37 bgm2.addEventListener("ended", ()=>{ 38 bgm2.currentTime = 0; 39 btn2.innerHTML = '<img src="images/voice.svg">'; 40 }); 41}); 42

試したこと

・imgタタグ2つ用意し、通常とhoverで表示させるimgを分けた
→hoverは白になったのでOKだが、再生・一時停止をした際にscript.jsで設定している茶色いボタン(通常時のもの)になってしまう。その後hoverしても白いアイコンには切り替わらない。

やりたいこと

再生する際・一時停止する際・再度再生する際、
hoverしている時はplay_white.svg やpause_white.svg の白い画像に差し替えたい
(上の記述の中にpause_white.svgはありません...どこに入れればいいか分からず... ; ;)

JavaScriptに関してはほとんど知識がなく、様々な記事を参考にここまで作成いたしましたが、色変更のところでつまずいてしまい、どうしようもできなくなってしまいました。
「やりたいこと」に書いてある挙動ができれば、上記のコードは大きく変わっても構いません。
お力いただけるかたいらっしゃいましたらどうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

上書きして .play-white を消してしまっているからだと思います。

html

1 btn1.innerHTML = '<img src="images/voice.svg">'+'<span>音声1</span>'; // 「再生ボタン」に切り替え

上書き後のHTMLにも .play-white を書いておけばいいのでは。

投稿2022/01/20 08:20

Lhankor_Mhy

総合スコア37511

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

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

kizunami

2022/01/20 09:27

ご回答ありがとうございます!! ``` btn1.innerHTML = '<img src="images/voice.svg"><img src="images/play_white.svg">'+'<span>音声1</span>'; ``` ということでしょうか...?? 上記にすると、一時停止後にvoice.svgとplay_white.svgがどちらも表示されるようになってしまいました。 追加する場所・方法が間違っていいますでしょうか。。。 ご教示いただけますと幸いです🙇‍♀️
Lhankor_Mhy

2022/01/21 00:30

.play-white というセレクタは、class="play-white" がある要素という意味です。 上記ご提示のコードにはやはり .play-white がないように見えます。
kizunami

2022/01/24 01:58

ありがとうございます!! 返信が遅くなり失礼いたしました。 ようやく仰っている意味を理解することができ、実装してみたところ思い通りの挙動になりました! この度はありがとうございました!
Lhankor_Mhy

2022/01/24 02:10

ご解決されて何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問