はじめに
- レスポンシブデザインに欠かせないデバイス判定を行う方法をメモしていきます。
画面幅による切り替え
window.matchMedia
if (window.matchMedia("(max-width: 768px)").matches) {
// ここにビューポート768px以下の挙動を記述
} else {
// ここにビューポート769px以上の挙動を記述
}
- ビューポートを基に判定し、考え方としては css のメディアクエリと同じです。
-
matchMedia
はMediaQueryList
オブジェクトを返し、オブジェクトが持っているmatches
プロパティは渡した引数に対してboolean
の値を返します。 - 上記のコードの場合、引数に渡した
max-width: 768px
に対してビューポートが 768px 以下だったらmatches
プロパティからtrue
が返ってきます。
window.innweWidth
if (window.innerWidth <= 768) {
// ここにビューポート768px以下の挙動を記述
} else {
// ここにビューポート769px以上の挙動を記述
}
-
innerWidth
はスクロールバーを含むウインドウ幅を値で返します。 - 数値で返ってくるので直感的にわかりやすいです。
おわりに
-
matchMedia
は css と同じ記述ができ、返ってくる値もtrue
かfalse
なのでわかりやすいです。 -
innerWidth
はスマホの場合だとonresize
が頻繁に起こり、端末への負荷が大きくなるようです(参考:window.matchMedia をそろそろ活用してもいい頃 -
matchMedia
は IE9 以下は対応していないということですが、IE のサポートが 2022 年 6 月 15 日で終了するとなるとmatchMedia
(一択?)がよさそうです。