Mik*_*ike 9 html javascript css svelte
我有一个src/components/UI/Sidebar.svelte
带有变量切换的组件。
export let toggle = true;
Run Code Online (Sandbox Code Playgroud)
我想在当切换为 true 时添加一个类名noscroll
来<body>
锁定正文滚动。我已将其添加到src/template.html
<style>
.noscroll { position: fixed; overflow-y:scroll };
</style>
Run Code Online (Sandbox Code Playgroud)
当侧边栏打开时,实现这样的 y 轴滚动锁的最佳方法是什么?
Ste*_*aes 17
在 Sidebar.svelte 中,您添加一个切换类名的反应函数
export let toggle;
$: document.body.classList[toggle ? 'add' : 'remove']('noscroll');
Run Code Online (Sandbox Code Playgroud)
更新
感谢 Rich Harris 指出,切换需要第二个参数规范,这可以简化为
export let toggle;
$: if (process.browser) document.body.classList.toggle('noscroll', toggle);
Run Code Online (Sandbox Code Playgroud)
编辑
当使用自提出此问题以来进入公开测试版的 SvelteKit 时,您还可以使用browser
提供的变量。
export let toggle;
import { browser } from '$app/env'
$: if (browser) document.body.classList.toggle('noscroll', toggle);
Run Code Online (Sandbox Code Playgroud)