Open1

Gatsby.jsのページローディングに動画を使用している場合に必ず動画の終了時に消したい

かこなーるかこなーる

完全に自分用の備忘録です。
Gatsby.jsでページローディングに動画を使用したい場合がありました。
ある程度尺の長い動画だったため必ず動画の終了時に消えるようにしたいとのこと。
それで下記のようにしました。

// gatsby-browser.js

// Gatsbyの"onRouteUpdate"を使いローディング完了時に処理を走らせる
exports.onRouteUpdate = () => {
  const loader = document.getElementById("loader")
  const video = loader.querySelector("video")

  // videoへループを設定しているのでそれをまずは解除する。
  video.loop = false

  // loopを解除するとMediaエレメントの"ended"イベントが動画終了時に走るようになるので使う
  video.addEventListener("ended", event => { 
    loader.classList.add("loaded")

    setTimeout(() => {
      loader.remove()
    }, 500)
  })
}

「setTimeout使うのダサい」は分かっているが今回は時間が確定しているので使った。
animationendでCSSアニメーションの終了イベントを取得できるのでそちらを使ったほうが良いかも。
なんかそもそもプラグインやライブラリでもっと良さげな方法があるかもしれない。
余裕ある時に調べる