1
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.

JavaScriptにおいてWindow.addEventLisnerを切り出す理由

Posted at

はじめに

JavaScriptにおいてWindow.addEventLisnerに関する記述を最後にする意味が分かりづらかったので、まとめてみました。

解決したい内容

JavaScriptにおいてWindow.addEventLisnerの記載を最後にするかを理解する。

先にwindow.addEventListenerを記述した場合


window.addEventListener('load', function(){

  const pullDownButton = document.getElementById("lists")
  const pullDownParents = document.getElementById("pull-down")
  const pullDownChild = document.querySelectorAll(".pull-down-list")
  const currentList = document.getElementById("current-list")

  pullDownButton.addEventListener('mouseover', function(){
    this.setAttribute("style", "background-color:#FFBEDA;")
  })

  pullDownButton.addEventListener('mouseout', function(){
    this.removeAttribute("style")
  })

  pullDownButton.addEventListener('click', function() {
    if (pullDownParents.getAttribute("style") == "display:block;") {
      pullDownParents.removeAttribute("style")
    } else {
      pullDownParents.setAttribute("style", "display:block;")
    }
  })

  pullDownChild.forEach(function(list) {
    list.addEventListener('click', function() {
      const value = list.innerHTML
    })
  })
})

何が問題なのか

  • 今回は「ページが読み込まれたあとに実行する処理」を記載しただけだが、この後にページに関するオブジェクト(window.addEventListener)を追加で記載しなければならない場合、どこがページの読み込み後の処理なのか分からなくなってしまう。
  • 最初の関数宣言で処理自体は実行できるが関数に名前を定義できていない。

window.addEventListener('load', pullDown)を切り分けた場合

function pullDown() {

  const pullDownButton = document.getElementById("lists")
  const pullDownParents = document.getElementById("pull-down")
  const pullDownChild = document.querySelectorAll(".pull-down-list")
  const currentList = document.getElementById("current-list")

  pullDownButton.addEventListener('mouseover', function(){
    this.setAttribute("style", "background-color:#FFBEDA;")
  })

  pullDownButton.addEventListener('mouseout', function(){
    this.removeAttribute("style")
  })

  pullDownButton.addEventListener('click', function() {
    if (pullDownParents.getAttribute("style") == "display:block;") {
      pullDownParents.removeAttribute("style")
    } else {
      pullDownParents.setAttribute("style", "display:block;")
    }
  })

  pullDownChild.forEach(function(list) {
    list.addEventListener('click', function() {
      const value = list.innerHTML
      currentList.innerHTML = value
    })
  })
}

window.addEventListener('load', pullDown)

※「ページが読み込まれたあとに実行する処理」の関数名にpullDownとして定義しています。

何が良くなったのか

関数の呼び出しを最後にすることで、どこまでが「ページが読み込まれたあとに実行する処理」なのかが分かりやすくなる。

Rubyでクラスメソッドの処理を呼び出す際も処理内容を上に書いて下に呼び出す構文を記載  している

ページが読み込まれたあとに実行する処理」の関数名にpullDownとして関数に名前をつけることができる。

1
0
1

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
1
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?