22 * layout.js (refactored)
33 * --------------------------------------------------
44 * 共通レイアウト要素(ヘッダー/フッター)を動的に読み込むスクリプト。
5+ *
6+ * 変更点:
7+ * - モバイル(幅 <= 768px)の場合、`bread-pet` は完全に初期化対象外にする。
8+ * - DOM に要素が含まれていても、表示を消し、移動/マウス検知などのロジックは一切セットしない。
9+ * - デスクトップ時のみ従来の bread-pet の挙動を初期化する。
510 * --------------------------------------------------
611 */
712
@@ -14,6 +19,12 @@ document.addEventListener("DOMContentLoaded", () => {
1419 return name && name . length > 0 ? name : "index.html" ;
1520 } ) ( ) ;
1621
22+ // ブレークポイント判定: モバイルなら true を返す
23+ function isMobileViewport ( ) {
24+ // CSS 側のメディアクエリと整合する (layout.css の @media (max-width: 768px) に合わせる)
25+ return window . matchMedia ( "(max-width: 768px)" ) . matches ;
26+ }
27+
1728 // ヘルパー: layout.js の読み込みパスから partials の相対パスを返す
1829 function getPartialsPath ( ) {
1930 const scripts = document . getElementsByTagName ( "script" ) ;
@@ -134,11 +145,33 @@ document.addEventListener("DOMContentLoaded", () => {
134145 } ) ;
135146 }
136147
137- // Bread Pet 初期化: 既存の挙動を保ちながら整理
148+ /**
149+ * Bread Pet 初期化
150+ *
151+ * 重要:
152+ * - モバイル判定 (isMobileViewport) の場合は何も初期化せず、要素を完全に非表示にして終了する。
153+ * - これにより移動ロジック、マウスオーバー監視、アニメーションループ等は一切登録されない。
154+ */
138155 function initBreadPet ( ) {
139156 const bread = document . getElementById ( "bread-pet" ) ;
140157 if ( ! bread ) return ;
141158
159+ // モバイルでは完全に非表示かつ初期化対象外とする
160+ if ( isMobileViewport ( ) ) {
161+ // DOM 上にある場合でも、表示・相互作用を遮断する(CSS より優先されるように inline style を設定)
162+ try {
163+ bread . style . display = "none" ;
164+ bread . style . visibility = "hidden" ;
165+ bread . style . pointerEvents = "none" ;
166+ bread . setAttribute ( "aria-hidden" , "true" ) ;
167+ bread . setAttribute ( "data-bread-disabled" , "true" ) ;
168+ } catch ( e ) {
169+ // 何か失敗しても初期化は行わない。
170+ }
171+ return ;
172+ }
173+
174+ // 以下はデスクトップ向けの既存ロジック(必要に応じて簡潔化はしていない)
142175 // 状態
143176 let targetX = 0 ;
144177 let targetY = 0 ;
@@ -322,7 +355,31 @@ document.addEventListener("DOMContentLoaded", () => {
322355 setupLanguageSwitch ( currentPath ) ;
323356 setupActiveNav ( currentPath ) ;
324357 setupNavToggle ( ) ;
325- initBreadPet ( ) ;
358+
359+ // bread-pet はモバイル時は初期化しない(表示/ロジックともに除外)
360+ // 加えて、念のため header がすでに bread 要素を含む場合は非表示化する
361+ if ( isMobileViewport ( ) ) {
362+ const breadEl =
363+ document . getElementById ( "bread-pet" ) ;
364+ if ( breadEl ) {
365+ try {
366+ breadEl . style . display = "none" ;
367+ breadEl . style . visibility = "hidden" ;
368+ breadEl . style . pointerEvents = "none" ;
369+ breadEl . setAttribute ( "aria-hidden" , "true" ) ;
370+ breadEl . setAttribute (
371+ "data-bread-disabled" ,
372+ "true" ,
373+ ) ;
374+ } catch ( e ) {
375+ // 無視
376+ }
377+ }
378+ // モバイルなので初期化はスキップ
379+ } else {
380+ // デスクトップ等の大きいビューでは従来通り初期化
381+ initBreadPet ( ) ;
382+ }
326383 } )
327384 . catch ( ( err ) => {
328385 console . error (
0 commit comments