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

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

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

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

HTML

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

CSS

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

Q&A

解決済

1回答

768閲覧

i要素にホバーすると対応するp要素がふわっと浮き出てくる仕組みが作れない

takuma1217

総合スコア20

JavaScript

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2019/06/13 12:54

前提・実現したいこと

アイコンにホバーすると対応するテキストがふわっと浮き出てくる仕組み

該当のソースコード

html

1 <div class="coding skill"> 2 <i class="fas fa-code" id="coding"></i> 3 <p id="coding-content">デザイン通りに正確にコーディングすることはもち 4 ろんのこと、レスポンシブなWEBサイトを作ることにより、スマートフォン、PC 5 どちらからでも見やすいWEBサイトを制作することができます。</p> 6 </div> 7 <div class="direction skill"> 8 <i class="far fa-question-circle" id="direction"></i> 9 <p id="direction-content">WEBサイトを作るうえで、ターゲットやそのお 10 利用状況を具体的に定め、目的を明確にすることは何より大切です。丁寧なヒ 11 アリング調査により依頼者様のご希望を実現いたします。</p> 12 </div> 13 <div class="design skill"> 14 <i class="fas fa-paint-brush" id="design"></i> 15 <p id="design-content">依頼者様の想定されているターゲットや、利用状況 16 によって最適な配色、配置のWEBサイトを制作いたします。</p> 17 </div>

css

1.skill p{ 2 opacity:0; 3 transition:0.6s; 4} 5.skill p.active{ 6 opacity:1; 7 transform:translate(0,-20px); 8}

javascript

1const coding = document.getElementById('coding'); 2const direction = document.getElementById('direction'); 3const design = document.getElementById('design'); 4 5const icons = [ 6 coding, 7 direction, 8 design, 9]; 10 11for(let i=0;i++;i<icons.length){ 12 icons[i].addEventListener('mouseover',()=>{ 13 document.getElementById(`$(icons[i])-content`).classList.add('active'); 14 }); 15};

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

エラーなどは表示されなかったです

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

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

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

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

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

kei344

2019/06/13 12:58

「作れない」とは「何をしたときに」「どうなると思って」「どうなったのか」を、具体的に記述されたほうが回答を得られやすいと思います。
takuma1217

2019/06/13 13:12

ご指摘ありがとうございます。htmlのi要素にmouseoverしたときに、それぞれ対応するテキスト(同じ領域内のp要素)がふわっと出てくるような仕組みを作りたいと考えておりました。 そのために、i要素にmouseoverしたときにp要素にactiveクラスをつけ、cssでactiveクラスのついているp要素がopacityが1になって、上に20ピクセル動くように記述しました。しかし実際はマウスホバーしてもオパシティが0のままでテキストが表示されませんでした。
guest

回答1

0

ベストアンサー

forの設定値の順番が違うと思います。

下記のようにしてみると分かりますが、

js

1for(let i=0;i++;i<icons.length){ 2 console.log(icons[i]);

何も出力されません。

初期値;ループを繰り返す条件;カウンタです。

js

1for(let i=0;i<icons.length;i++){ 2console.log(icons[i]);

下記、何がしたいのか今ひとつわかりません

js

1document.getElementById(`$(icons[i])-content`)

jQueryと混在させようとしているのでしょうか?
getElementById()に与える引数はあくまでidの名称なので、もし、**-contentと名前を付けたいのでしたら、IDを取得してくる必要があります。

js

1 document.getElementById(icons[i].getAttribute('id')+'-content').classList.add('active');

ただ、これって配列で持つ必要ないようにも思います。
div.skill配下のiとpって決まってますので、例えば下記のようにも組めます。

js

1let skillList= document.getElementsByClassName('skill'); 2 3for(let i=0;i<skillList.length;i++){ 4 let title = skillList[i].getElementsByTagName('i'); 5 let content = skillList[i].getElementsByTagName('p'); 6 title[0].addEventListener('mouseover',()=>{ 7 content[0].classList.add('active'); 8 }); 9}

投稿2019/06/13 13:24

編集2019/06/13 14:14
m.ts10806

総合スコア80850

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

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

takuma1217

2019/06/13 13:39

javascriptにあまり慣れていなくて初歩的な部分があいまいなまま質問してしまってすみません!丁寧なご指摘ありがとうございます!何がしたいのかいまひとつわからないとおっしゃった部分は、activeクラスをつける要素をテンプレートリテラルで取得しようと試みていました!そうなると()→{}を使うべきなのは気づいたのですが、自分なりに試行錯誤してみたのですが動かず、理由もわかりません、、。良ければ教えていただいてよろしいでしょか??
m.ts10806

2019/06/13 13:43

テンプレートリテラルを無理に使わなくてもいいのですけど・・・ 私自身あまり使いませんが、こうですかね。 document.getElementById(`${icons[i].getAttribute('id')}-content`).classList.add('active'); やはり変数部分と文字列部分をわけて+で連結したほうが見やすいとは思います。
takuma1217

2019/06/13 15:03

ありがとうございます!IDをきちんと取得できていなかったのが問題だったんですね、、 ほんと何度も質問してしまって申し訳ないのですが、先程伝えていただいた配列を組まないタイプのコードについてわからない部分がありました。 title[0]をmouseoverしたときに、content[0]にactiveクラスを付与するという部分なのですが、このコードだと配列の0番目に対してしかイベントを適応できないと思っていました。コードを実装してみるとイメージ通り完璧に動くのですが、理解はできていない状況です、、、。
m.ts10806

2019/06/14 01:31

ごめんなさい。コメント気づきませんでした。 >IDをきちんと取得できていなかったのが問題だった というより、例えjQueryでも$(icons[i])だけの記述だと要素そのものを指すのでIDにはなり得ない、というべきでしょうか。 結局のところ配列で保持しているのはgetElementById()の結果の要素なので。 >このコードだと配列の0番目に対してしかイベントを適応できないと思っていました getElementsByTagName() はHTMLCollectionを返します。 https://developer.mozilla.org/ja/docs/Web/API/Document/getElementsByTagName それにdocument.ではなくskillList[i].でとりに行っているので、それぞれの配下のみ取得しているということになっています。 HTMLCollectionなので例え1件しか対象がなくても配列で取得されます (getElement"s" ですから) で、1件しかないと分かっているので[0]番目固定で取得しに行けるわけです。
takuma1217

2019/06/15 12:58

なるほどすっきり理解できました!! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問