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

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

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

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

Q&A

2回答

5980閲覧

resizeイベントを使用した際にjsが動かない

06140614

総合スコア2

JavaScript

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

0グッド

0クリップ

投稿2020/07/26 04:26

編集2020/07/26 08:14

resizeイベントを使用した際に、jsが動かず原因がわからない状況でございます。

resizeイベントを使用しない際は問題なく動作いたしました。

【問題なく動作いたしました↓】

JavaScript

1window.addEventListener('DOMContentLoaded',function(){ 2 const target={tab1:"first",tab2:"second",tab3:"third",tab4:"four"}; 3 [].forEach.call(document.querySelectorAll('.tab'),function(x){ 4 x.addEventListener('click',function(e){ 5 const slideClass=document.querySelector('#slide').classList; 6 [].forEach.call(slideClass,function(x){ 7 slideClass.remove(x); 8 }); 9 slideClass.add("move-to-"+target[x.id]); 10 document.querySelector('.tab.selected').classList.remove('selected'); 11 x.classList.add('selected'); 12 }); 13 }); 14});

【resizeイベント導入後 -- jsが動きません↓】
resizeイベントはこちらのサイトを参考させていただきました。

JavaScript

1var timeoutId ; 2window.addEventListener( "resize", function () { 3 if ( timeoutId ) return ; 4 timeoutId = setTimeout( function () { 5 timeoutId = 0 ; 6 // 処理内容↓↓↓ 7 window.addEventListener('DOMContentLoaded',function(){ 8 const target={tab1:"first",tab2:"second",tab3:"third",tab4:"four"}; 9 [].forEach.call(document.querySelectorAll('.tab'),function(x){ 10 x.addEventListener('click',function(e){ 11 const slideClass=document.querySelector('#slide').classList; 12 [].forEach.call(slideClass,function(x){ 13 slideClass.remove(x); 14 }); 15 slideClass.add("move-to-"+target[x.id]); 16 document.querySelector('.tab.selected').classList.remove('selected'); 17 x.classList.add('selected'); 18 }); 19 }); 20 }); 21     // 処理内容↑↑↑ 22 }, 500 ) ; 23} ) ;

大変恐縮ですが、プログラミングにつきまして
初心者のため何が違うのかなど詳しくご教示いただけると幸いです。

お手数おかけいたしますが、何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

addEventListenerはその名のとおりイベントに関数を紐付けるためのものなので、紐付け後にそのイベントが起こるまで何も処理を行いません。
DOMContentLoadedはresizeイベントより前に1度だけ起きるイベントなので、動かないのは当然です。また、resizeのように複数回起こるイベントの中で他のイベントを登録するのは避けたほうが良いです。

【EventTarget.addEventListener() - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener

投稿2020/07/26 04:36

kei344

総合スコア69398

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

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

06140614

2020/07/26 04:46

@kei344様 ご返答ありがとうございます! この場合、resizeイベント発火後のjsを書き換えないと resizeイベントを使用すべきではないということでしょうか。。。
kei344

2020/07/26 14:18

> resizeイベントを使用すべきではない 違います。 resizeイベント内でaddEventListenerを使うような設計は避けたほうが良い(=使わないでできる方法を考えないと副作用が大きい)という回答です。
guest

0

DOMContentLoadedは初期レンダリング時にdocumentが読み込み終わったら実行されるイベントです。

DOMContentLoaded内の処理はDOMContentLoaded外に出して定義すれば動くようになると思います。

投稿2020/07/26 05:25

FrontEnd_Japan

総合スコア271

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

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

06140614

2020/07/26 08:09

@FrontEnd_Japan様 ご返答ありがとうございます! >DOMContentLoaded内の処理はDOMContentLoaded外に出して定義すれば動くようになると思います。 →大変恐縮ですが、プログラミングにつきまして  初心者のため外に定義がよくわからない状況になります。 恐れ入りますが、ご教示いただくことは可能でしょうか。 お手数おかけいたしますがよろしくお願いいたします。
FrontEnd_Japan

2020/07/26 12:59

resizeイベント後に実行したい処理は何でしょうか??
FrontEnd_Japan

2020/07/26 13:01

resizeイベントの中でクリックイベントもありますので、これも宜しくないです。 resizeイベント後に実行したい処理が分かれば、それだけをresizeイベント内に記載しておけばOKだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問