TS Scroll Lock is a lightweight scroll lock library built using TypeScript.
- 🫶 Uncomplicated: Easy to install and use.
- ☁️ CDN: No bundler required.
- 📦 Lightweight: The package only weighs ~1kb.
- 🦾 Type Strong: Written in TypeScript.
TS Scroll Lock can be installed using your favorite package manager or directly via CDN.
npm i -S ts-scroll-lock
yarn add ts-scroll-lock
TS Scroll Lock can be loaded via CDN using ESM or UMD format.
import useScrollLock from 'https://unpkg.com/ts-scroll-lock/dist/ts-scroll-lock.es.js'
<script src="https://unpkg.com/ts-scroll-lock/dist/ts-scroll-lock.umd.js"></script>
Import the functions to your app.
import { enableScroll, disableScroll } from 'ts-scroll-lock'
Enable or disable scrolling by calling the functions:
disableScroll()
enableScroll()
By default, body will be targeted, but it's possible to scroll lock another element by passing it to either function.
const scrollTarget = document.querySelector('#elementId')
disableScroll(scrollTarget)
enableScroll(scrollTarget)
The library can easily be used in Vue.
<script setup lang="ts">
import { enableScroll, disableScroll } from 'ts-scroll-lock'
const showModalElement = () => {
// ... other logic
disableScroll()
}
const hideModalElement = () => {
// ... other logic
enableScroll()
}
</script>
<template>
<div ref="domContainer">
...
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { enableScroll, disableScroll } from 'ts-scroll-lock'
const domContainer = ref(null)
const showModalElement = () => {
// ... other logic
disableScroll(domContainer.value)
}
const hideModalElement = () => {
// ... other logic
enableScroll(domContainer.value)
}
</script>
The library can easily be used in React.
import { enableScroll, disableScroll } from 'ts-scroll-lock'
export function MyComponent () {
const showModalElement = () => {
// ... other logic
disableScroll()
}
const hideModalElement = () => {
// ... other logic
enableScroll()
}
return (
<div> JSX </div>
)
}
import { useRef } from 'react'
import { enableScroll, disableScroll } from 'ts-scroll-lock'
export function MyComponent () {
const demoRef = useRef(null)
const showModalElement = () => {
// ... other logic
disableScroll(demoDivRef.current)
}
const hideModalElement = () => {
// ... other logic
enableScroll(demoDivRef.current)
}
return (
<div ref={demoRef}> JSX </div>
)
}
Any feedback is gladly received, whether it's a code improvement or feature request, open an issue / connect with me on LinkedIn.
MIT License © 2022-present Carl Lidström Dreyer