View Transitions APIをスマホ限定にする方法

Filed under: View Transitions API — kdcs @ 26年3月5日 木曜日

View Transitions APIの開発はスマートフォンの方が先行していてパソコンのブラウザについてはedgeは比較的安定しているがchromeは開発中で不安定になる。そこで、安定的に使えるスマートフォンだけView Transitions APIを使うための切り替え方法。

スマホだけUserAgentで判定する方法(こちらが確実)

javascript

// スマホ判定(iPhone / Android)
const ua = navigator.userAgent.toLowerCase();
const isMobile =
  ua.includes("iphone") ||
  (ua.includes("android") && ua.includes("mobile"));

if (isMobile) {
  document.documentElement.style.setProperty("--vt-enabled", "1");
} else {
  document.documentElement.style.setProperty("--vt-enabled", "0");
}

css

@view-transition {
  navigation: auto;
}

/* スマホ以外では View Transitions を完全に無効化 */
:root:not([style*="--vt-enabled: 1"]) {
  view-transition-name: none !important;
}

:root:not([style*="--vt-enabled: 1"]) .photo-1 {
  view-transition-name: none !important;
}

/* root のアニメーション */
@keyframes zoom-fade-in {
  from { opacity: 0; transform: scale(0.95); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes zoom-fade-out {
  from { opacity: 1; transform: scale(1); }
  to   { opacity: 0; transform: scale(1.05); }
}

::view-transition-new(root) {
  animation: zoom-fade-in 0.5s ease;
}

::view-transition-old(root) {
  animation: zoom-fade-out 0.4s ease;
}

/* スマホでのみ有効になる .photo-1 */
.photo-1 {
  view-transition-name: photo-example-1;
  contain: paint;
}

画面幅(768px)で切り替える方方法

javascript

if (window.matchMedia("(max-width: 768px)").matches) {
  document.documentElement.style.setProperty("--vt-enabled", "1");
} else {
  document.documentElement.style.setProperty("--vt-enabled", "0");
}

css

@view-transition {
  navigation: auto;
}

/* スマホ以外では View Transitions を完全に無効化 */
:root:not([style*="--vt-enabled: 1"]) {
  view-transition-name: none !important;
}

:root:not([style*="--vt-enabled: 1"]) .photo-1 {
  view-transition-name: none !important;
}

/* root のアニメーション */
@keyframes zoom-fade-in {
  from { opacity: 0; transform: scale(0.95); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes zoom-fade-out {
  from { opacity: 1; transform: scale(1); }
  to   { opacity: 0; transform: scale(1.05); }
}

::view-transition-new(root) {
  animation: zoom-fade-in 0.5s ease;
}

::view-transition-old(root) {
  animation: zoom-fade-out 0.4s ease;
}

/* スマホでのみ有効になる .photo-1 */
.photo-1 {
  view-transition-name: photo-example-1;
  contain: paint;
}

サイト内検索

カテゴリー

最近の投稿

« |View Transitions APIをスマホ限定にする方法| »
↑上に戻る