scrolllock

View Source

NOTE: Introduced feature in v0.2.4.

scrolllock is a Svelte Store which sets overflow: hidden; on an HTMLElement whenever the Store is set to true. Restoring the previous value of overflow whenever set back to false. Allowing for connecting Component open states like for modals, to the prevent overscrolling the main document body.

NOTE: If no HTMLElement is passed into the Store function, it'll default to the root <html>.

<script>
    import {
        Box,
        Button,
        Heading,
        scrolllock,
    } from "@kahi-ui/framework";

    const scrolllock_store = scrolllock(
        document.querySelector(".repl-render")
    );

    const on_click = () =>
        ($scrolllock_store = !$scrolllock_store);
</script>

<Button on:click={on_click}>Toggle Scroll Lock</Button>

<Box palette="accent" padding="small">
    <Heading>Scrollable content</Heading>
    <Heading is="h2">Scrollable content</Heading>
    <Heading is="h3">Scrollable content</Heading>
    <Heading is="h4">Scrollable content</Heading>
</Box>

<Box palette="affirmative" padding="small">
    <Heading>Scrollable content</Heading>
    <Heading is="h2">Scrollable content</Heading>
    <Heading is="h3">Scrollable content</Heading>
    <Heading is="h4">Scrollable content</Heading>
</Box>

<Box palette="negative" padding="small">
    <Heading>Scrollable content</Heading>
    <Heading is="h2">Scrollable content</Heading>
    <Heading is="h3">Scrollable content</Heading>
    <Heading is="h4">Scrollable content</Heading>
</Box>

<Box palette="alert" padding="small">
    <Heading>Scrollable content</Heading>
    <Heading is="h2">Scrollable content</Heading>
    <Heading is="h3">Scrollable content</Heading>
    <Heading is="h4">Scrollable content</Heading>
</Box>

Imports

import {scrolllock} from "@kahi-ui/framework";

Compatibility

The Store is dependent on setting an element's inline styles via Javascript. So on server, will return a readable Store which will error on having a new value set.