実現したいこと
svelteでナビゲーション入りのモーダルメニューを作成しています。
リンク先により、ページ内遷移となる場合があるのですが
その際にモーダルメニューをOFFに切り替えたいです。
発生している問題・分からないこと
aタグや、親のliタグににonClickを設定して試してみましたが
ページ内遷移されるのみで、onClickは走っていないようでした。
該当のソースコード
svelte
1<script> 2 export let menu; 3 4 let show = false; 5 const handleClick = () => { 6 document.body.style.overflow = show ? '' : 'hidden'; 7 show = !show; 8 }; 9 const handleClickAnchor = () => { 10 console.log('click'); 11 document.body.style.overflow = ''; 12 document.startViewTransition(() => { show = false }); 13 }; 14</script> 15 16<button transition:fade onclick={() => handleClick()}>toggle</button> 17<nav transition:fade> 18 <ul> 19 {#each menu as item} 20 <li> 21 <a href={item.url} onClick={() => handleClickAnchor()}>{item.name}</a> 22 </li> 23 {/each} 24 </ul> 25</nav>
menuSetting
1const menu = [ 2 { 3 name: "Home", 4 url: "/", 5 }, 6 { 7 name: "News", 8 url: "/#news", // 同ページでクリックした場合もモーダルをオフにしたい 9 }, 10 { 11 name: "Contact", 12 url: "/contact", 13 external: false, 14 }, 15]
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
onClickを設定する要素を変えてみたり、startViewTransitionありなしで試したりしましたが
そもそもconsole.logが表示されないので、
根本的に記述方法が間違っているかもしれないのですが、調べきれずご相談した次第です。
恐れ入りますがご教示いただけるとありがたいです。
補足
"svelte": "^5.30.1"
> ページ内遷移されるのみで、onClickは走っていないようでした。
ページ「内」遷移(別なページに移るのではない)、というのは間違いないですか?
コメントありがとうございます!
情報の不足大変申し訳ありません。
このsvelte製モーダルは、astroのページでLayout経由で読み込んでいます。
現在地が index.astro(トップページ)の状態でモーダルを開き、
リンク先が「href="/#news"」のaタグをクリックすると
スムーススクロールで該当箇所へ移動するがモーダルは表示されたまま、というのが現状です。
(モーダルが透けてるのでスムーススクロールで移動してるのが見える)
こういった状況で「ページ内遷移」と表現してしまいましたが誤りでしたら申し訳ありません。
ちなみにClientRouterのビュートランジションは読み込んでいません。

あなたの回答
tips
プレビュー