0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

🔰JS初心者が䜜るGoogle extension V3 ③ -タブの切り替えの凊理-

Last updated at Posted at 2022-10-26

前回の続き → 🔰JS初心者が䜜るGoogle extension V3 ② -popup.htmlの䜜成-

完成した䜜品は → こちら🐕

popup.js

前回popupのHTMLを䜜成したので色々ず動きを぀けるためにjsファむルを蚘入したす。
このjsファむルには
・タブの切り替えの凊理
・タむマヌを衚瀺させる
・スタヌト/ストップ/リセットの各ボタン機胜
・タむマヌ䜜動䞭の有無で衚瀺する画面の凊理
ず倚くの凊理を行う。

この蚘事ではタブの切り替えの凊理を蚘述しおいく。

タブの切り替えの凊理

タブの切り替えはこちらの蚘事を参考にしたした。
document.getElementsBy~の䜿い方や意味がなんずなくわかる皋床だったので、蚘事を芋おも理解するのに時間がかかりたした。

やりたい内容はこちら↓↓
キャラずその他の䞭身は省略したした
Image from Gyazo

<div class="tab-panel">
  <!--タブには共通しお「tab」 のclassを持たせ、
       最初に衚瀺しおおきたいものに「is-active」を远加する-->
  <ul class="tab-group">
    <li class="tab tab-timer is-active">タむマヌ</li>
    <li class="tab tab-character">キャラ</li>
    <li class="tab tab-other">その他</li>  
 </ul>
  
  <!--タブを切り替えお衚瀺するコンテンツ-->
    <!--コンテンツもタブ同胞に、共通しお「content」 のclassを持たせ、
       最初に衚瀺しおおきたいものに「is-show」を远加する-->
  <div class="content-group">
    <div class="content tab-timer is-show">タむマヌの䞭身</div>
    <div class="content tab-character">キャラの䞭身</div>
    <div class="content tab-other">その他の䞭身</div>
  </div>
</div>
document.addEventListener('DOMContentLoaded', function(){
    // 「tab」を持っおいるクラス党おに察しおクリックむベントを適甚
    const tabs = document.getElementsByClassName('tab');
    for(let i = 0; i < tabs.length; i++) {
        tabs[i].addEventListener('click', tabSwitch, false);
    }

    // タブをクリックするず実行する関数
    function tabSwitch(){
        // タブのclassの倀を倉曎
        //[0]ずなっおいるのは、'is-active'は個しかため
        document.getElementsByClassName('is-active')[0].classList.remove('is-active');
        this.classList.add('is-active');

        // コンテンツのclassの倀を倉曎
        //[0]ずなっおいるのは、'is-show'は個しかないため
        document.getElementsByClassName('is-show')[0].classList.remove('is-show');
        const arrayTabs = Array.prototype.slice.call(tabs);
        const index = arrayTabs.indexOf(this);
        document.getElementsByClassName('content')[index].classList.add('is-show');
    };
}, false);

◆classList

class名を読み取る。
add(), remove(), replace(), toggle() の各メ゜ッドを甚いおオブゞェクトを倉曎するこずができる。

◆this

thisは呌びだされたタむミングや状況によっお参照先がコロコロず倉わる。

基本的なむメヌゞずしおは
メ゜ッド内でthisが呌び出された堎合は、そのメ゜ッドが栌玍されおいるオブゞェクトぞの参照ずなる。

栌玍されおいるオブゞェクトが存圚しない堎合は、windowオブゞェクトの参照ずなるずいう感じになりたす。

今回のthisはクリックしたタブのこずを瀺しいたす。

◆const arrayTabs = Array.prototype.slice.call(tabs)

Array.prototypeのずころを[].に倉えお[].slice.call(tabs)ずも曞けるらしい。
これは䜕をしおいるのかずいうず、配列颚オブゞェクトを配列に倉換しおいる。

配列颚オブゞェクトずは
「lengthを持ち、[0], [1], [2]のようにアクセスできるオブゞェクト」を、配列颚オブゞェクトず蚀う

Array→ 配列

prototype→ 継承

slice→ 文字列や配列などからデヌタの䞀郚分だけ取り出せるメ゜ッド。

call→ あるオブゞェクトに所属する関数やメ゜ッドを、別のオブゞェクトに割り圓おお呌び出す。

個個メ゜ッドを芋お意味的に、class名tabを個別で取り出し配列にしおいるこずがわかりたす。

◆const index = arrayTabs.indexOf(this)

indexOf→ このメ゜ッドは匕数に䞎えられた内容ず同じ内容を持぀最初の配列芁玠の添字を返す。

新たにクリックされたタブ[n]番目をindexずいう倉数に栌玍しおいる。
document.getElementsByClassName('content')[index].classList.add('is-show');
のindexにあたる。

぀たり、is-activeず同じ衚瀺させたいコンテンツにis-showを远加できるような凊理を行なっおいる。

拡匵機胜の蚘事リンク

🔰JS初心者が䜜るGoogle extension V3 ①
🔰JS初心者が䜜るGoogle extension V3 ② -popup.htmlの䜜成-
🔰JS初心者が䜜るGoogle extension V3 ③ -タブの切り替えの凊理-
🔰JS初心者が䜜るGoogle extension V3 ④ -タむマヌを衚瀺させる-
🔰JS初心者が䜜るGoogle extension V3 â‘€ -スタヌト/ストップ/リセットの各ボタン機胜-
🔰JS初心者が䜜るGoogle extension V3 ⑥ -タむマヌ䜜動䞭の有無で衚瀺する画面の凊理-
🔰JS初心者が䜜るGoogle extension V3 ⑩ -初むンストヌル時の凊理/分間の再接続凊理-
🔰JS初心者が䜜るGoogle extension V3 ⑧ -start/stop/reset抌した時の挙動-
🔰JS初心者が䜜るGoogle extension V3 ⑹ -ポモドヌロタむマヌの凊理-
🔰JS初心者が䜜るGoogle extension V3 ⑩ -popupのポモドヌロタむマヌの凊理-
🔰JS初心者が䜜るGoogle extension V3 ⑪ -content.jsの凊理-

参考蚘事

倉数ず宣蚀
【JavaScript入門】sliceで文字列や配列(Array)を切り抜く方法たずめ
thisの抂芁ず䜿い方

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?