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

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

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

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

JavaScript

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

CSS

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

Q&A

解決済

2回答

1252閲覧

javascriptのクリックイベントで要素を取得したい

tsu56569

総合スコア17

HTML5

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

JavaScript

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

CSS

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

0グッド

0クリップ

投稿2020/07/20 08:26

ピアノの鍵盤をクリックすると、そのクリックした鍵盤の要素を取得出来るようにしたいです。

html

1<div class="piano_block flex"> 2 <div class="key_block base"> 3 <div class="key white_key"></div> 4 <div class="key black_key on_key"></div> 5 </div> 6 <div class="key_block base"> 7 <div class="key white_key"></div> 8 <div class="key black_key on_key"></div> 9 </div> 10 <div class="key white_key"></div> 11 <div class="key_block base"> 12 <div class="key white_key"></div> 13 <div class="key black_key on_key"></div> 14 </div> 15 <div class="key_block base"> 16 <div class="key white_key"></div> 17 <div class="key black_key on_key"></div> 18 </div> 19 <div class="key_block base"> 20 <div class="key white_key"></div> 21 <div class="key black_key on_key"></div> 22 </div> 23 <div class="key white_key"></div> 24</div>

css

1 body, 2 html{ 3 padding: 0; 4 margin: 0; 5 } 6 7 .flex 8 { 9 display: flex; 10 } 11 .white_key{ 12 border: 1px solid black; 13 width: 28px; 14 height: 150px; 15 } 16 .black_key{ 17 background-color: black; 18 overflow: hidden; 19 width: 20px; 20 height: 100px; 21 } 22 .base{ 23 position: relative; 24 width: 28px; 25 height: 150px; 26 } 27 .on_key{ 28 position: absolute; 29 left: 68%; 30 top:0; 31 } 32

javascript

1 function select_key(e) { 2 target_key = e.target 3 console.log(target_key) 4 } 5 const keys = document.querySelectorAll('.key') 6 keys.forEach(key => { 7 key.addEventListener("click", select_key); 8 });

これでやると、黒鍵を選んだ時に下の白鍵が選ばれてしまう事が多々あります、どうしたら黒鍵、白鍵を区別してしっかりと取得出来るでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

鍵盤をすべて並列にもってみては?

追記

投稿2020/07/20 08:48

編集2020/07/20 10:21
yambejp

総合スコア115010

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

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

tsu56569

2020/07/20 09:07

すべて横並びということでしょうか?ピアノの見た目は維持したいのですが…
yambejp

2020/07/20 10:21 編集

追記しました
tsu56569

2020/07/20 11:34

ありがとうございます、この方法でいけそうです!
mkk

2020/07/21 01:12

tsu56569さん、質問に便乗失礼致します。 不適切であれば削除させていただきます。 yambejpさん 他の方の質問に便乗で大変申し訳ないのですが、後学のためお伺いできるでしょうか。 codepenに載せていただいている .b:nth-child(2) の部分ですが、私の中では「b」classが付いている要素の2番目という認識でした。 この記述で鍵盤全体の2番目と指定できるのはどういう解釈なのでしょうか。
yambejp

2020/07/21 01:19

nth-childはHTML要素群内での順番です。 .b:nth-child(2)とは 「bクラス要素の中の2番目」という意味ではなく 「2番目の要素の中のbクラスがついているもの」という意味です 今回は他の要素がないですが、沢山要素があるときに排他的処理を する場合には楽です
mkk

2020/07/21 01:30

ありがとうございます! 大変勉強になりました。
guest

0

keyが共通でクラス付与されているので、document.getElementsByClassName()で取得して、
forEachで各要素に対してクリックイベントを設定すれば良いと思います。

質問者様のHTML, CSSを使用してサンプルコードを作成しましたので、ご確認ください。

CodePenサンプル

投稿2020/07/20 11:37

FrontEnd_Japan

総合スコア271

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問