// モーダルを開く関数 function openModal(modalId) { const modal = document.getElementById(modalId); if (modal) { modal.classList.add('active'); document.body.style.overflow = 'hidden'; // フォーカスをモーダル内に移動 const closeButton = modal.querySelector('.close-btn'); if (closeButton) { closeButton.focus(); } } } // モーダルを閉じる関数 function closeModal(modal) { modal.classList.remove('active'); document.body.style.overflow = 'auto'; } // トグルスイッチの切り替え function toggleSetting(toggle) { toggle.classList.toggle('active'); } // DOMが読み込まれた後に実行 document.addEventListener('DOMContentLoaded', function() { // モーダルを開くリンクのイベントリスナー document.querySelectorAll('.modal-link').forEach(link => { link.addEventListener('click', function(event) { event.preventDefault(); const modalId = this.getAttribute('data-modal'); openModal(modalId); }); // キーボードイベント link.addEventListener('keydown', function(event) { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); const modalId = this.getAttribute('data-modal'); openModal(modalId); } }); }); // 閉じるボタンのイベントリスナー document.querySelectorAll('.close-btn, .close-modal').forEach(button => { button.addEventListener('click', function() { const modal = this.closest('.modal-overlay'); closeModal(modal); }); }); // 背景クリックでモーダルを閉じる document.querySelectorAll('.modal-overlay').forEach(overlay => { overlay.addEventListener('click', function(event) { if (event.target === this) { closeModal(this); } }); }); // トグルスイッチのイベントリスナー document.querySelectorAll('.toggle').forEach(toggle => { toggle.addEventListener('click', function() { toggleSetting(this); }); }); // ESCキーでアクティブなモーダルを閉じる document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { const activeModal = document.querySelector('.modal-overlay.active'); if (activeModal) { closeModal(activeModal); } } }); });