PCとSPのブレイクポイントをまたぐ際に、ページを強制的にリロードしたいという場面があるかと思います。
JavaScriptのresize
イベントで実装する方法をよく見かけますが、画面幅が1pxでも変わるたびに発火するため、パフォーマンス面ではあまり良くありません。
そこで今回の記事では、ブレイクポイントを通過する時のみページをリロードする方法を紹介します!
この方法だとブレイクポイントを通過するときのみ発火するので、無駄な処理を発生させることなくページをリロードすることができます。
【コピペ用】ブレイクポイントを通過する毎にページをリロードさせるコード
以下のコードのみで、ブレイクポイントを通過するたびにページを強制リロードすることができます。
const breakpoint = window.matchMedia("(max-width:768px)");
breakpoint.addEventListener("change", () => {
window.location.reload();
});
実際に使用するときは、max-width: 768px
の部分に必要なメディアクエリを記述してください。
【解説】ブレイクポイントを通過する毎にページをリロードさせるコードの解説
ここからはコードの解説をしていきます。
まず、CSSと同じようにmax-width
やmin-width
でメディアクエリを記述します。
const breakpoint = window.matchMedia("(max-width:768px)");
ここでは、max-width: 768px
としていますが、自由にブレイクポイントを指定してください。
続いて、ブレイクポイントを格納した変数breakpoint
に対して、change
イベントを設定します。
breakpoint.addEventListener("change", () => {
window.location.reload();
});
このchange
イベントは、メディアクエリの状態が変化したタイミングで発火します。
当記事のコードを例にすると、画面幅が768px
以下になった瞬間と、768px
を超えた瞬間に発火するということになります。
ページのリロードは、以下のコードで実装することができます。
window.location.reload();
これで、ブレイクポイントを通過するたびにページをリロードできるようになりました。
【まとめ】ブレイクポイントを通過する毎にページをリロードする方法
今回の記事では、ブレイクポイントを通過するごとにページをリロードする方法を紹介しました。
よく見るresize
イベントと違い、ブレイクポイントが切り替わる地点でのみコードが発火するので、パフォーマンス面でも優れています。
PCとSPで違う見せ方をする場合によく使用する方法ですので、ぜひ試してみてください。
コメント