質問したいこと
3つの異なる要素を取得し、イベントリスナーを使用して同じタイミングでクラスを切り替えする際、どういった方法で記述するのが、読みやすさ・効率・パフォーマンスなどにおいてよいのかお聞きしたいです。
上記について、実装したjsコードをもとにご教示いただきたいです。
実装したコード
まずは、簡単にHTMLを記載します。
(id名やクラス名は今回適当につけております。)
「#el1」「#el2」「#el3」に、スクロールイベント・クリックイベント時にクラスを切り替えます。
今回、肝になると思われるのが、【クラスを切り替えるタイミングは全く同じでも、付与されるcssプロパティはそれぞれ異なる】という点です。
HTML
1<div id="el1"></div> 2 3<div> 4 <p id="el2"></p> 5</div> 6 7<div> 8 <div> 9 <p> id="el3"></p> 10 </div> 11</div> 12 13<button id="btn"></button>
上記のHTMLをもとに実装したjs(ほかのコード省略)を記載します。
(末尾に、クラスが追加された際のcssも一緒に記載しておきます。)
JavaScript
1const el1 = document.getElementById('el1'); 2const el2 = document.getElementById('el2'); 3const el3 = document.getElementById('el3'); 4const btn = document.getElementById('btn'); 5const eventClass = 'js-el'; //切り替えを行うクラス名 6 7let elFunc = ()=> { 8 el1.classList.toggle(eventClass); 9 el2.classList.toggle(eventClass); 10 el3.classList.toggle(eventClass); 11} 12 13window.addEventLisntener('scroll', ()=> { 14 elFunc(); 15} 16 17btn.addEventLisntener('click', ()=> { 18 elFunc(); 19} 20 21/* 22//js-elが追加された際のcss 23#el1.js-el {color: red;} 24#el2.js-el {color: blue;} 25#el3.js-el {color: orange;} 26*/
私が実装する際に考えたのは、「jsの読みやすさを重視して切り替えるクラス名を同じにし、cssでそれぞれプロパティを変える」という方法です。
また、コードの効率を重視する下記の考え方もありました。
HTMLで3つの要素をidではなく同じクラス名を付与し、getElementsByClassで取得。
上記を配列に変換し、forEachでそれぞれ「js-el」を切り替える。
(どの要素にjs-elを追加したのか、jsをパッと見ただけで想像つかないという観点から辞めました。)
上記の考え方以外にもまだまだ考え方はたくさんあるかと思います。
そもそも、切り替えるタイミングは同じでも付与するcssプロパティが異なるなら、クラス名は別々にした方がいいなど。
読みやすさ・効率・パフォーマンス面でどういう考え方がよいのかなど意見お聞きしたいです。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。