@kwooshung/react-overlay-scrollbars-smooth v2.0.2
React Overlay Scrollbars Smooth
This integration plugin is based on OverlayScrollbars and smoothscroll-for-websites. It conceals the native scrollbars and provides a custom-styled overlay scrollbar that retains native functionality and feel, with the added benefit of inertial scrolling.
Why Develop It?
- I grew tired of the default browser scrollbars that look unappealing and vary across different browsers.
- They failed to maintain a consistent appearance and behavior across various browsers and lacked deep customization options.
- The default scrollbar doesn’t align with the design aesthetic of your website or application.
- When pop-ups are needed, the scrollbar appears outside the popup, causing both the page's scrollbar and the popup's scrollbar to appear simultaneously, leading to a poor user experience.
- When a Dialog/Modal pops up, it’s necessary to adjust the body’s padding-right, which requires special handling when the navigation bar is fixed, potentially causing jarring movements.
- The scrollbar feels stiff and not smooth enough when using the mouse wheel to scroll.
Installation
npm
npm install @kwooshung/react-overlay-scrollbars-smoothyarn
yarn add @kwooshung/react-overlay-scrollbars-smoothpnpm
pnpm add @kwooshung/react-overlay-scrollbars-smoothUsage
Styles
In some frameworks, you can directly introduce styles in global css / less / scss, as shown below:
@import url('@kwooshung/react-overlay-scrollbars-smooth/dist/react-overlay-scrollbars-smooth.css');In some frameworks, such as Next.js, you may need to add the ~ character, as shown below:
@import url('~@kwooshung/react-overlay-scrollbars-smooth/dist/react-overlay-scrollbars-smooth.css');You can also introduce it in a global page, such as the Layout page in Next.js or the corresponding component, as shown below:
import '@kwooshung/react-overlay-scrollbars-smooth/dist/react-overlay-scrollbars-smooth.css';components
Use the OverlayScrollbarsSmooth component on an element as follows:
import { OverlayScrollbarsSmooth } from '@kwooshung/react-overlay-scrollbars-smooth';
// What is used here is to introduce secondary styles directly into the component. You can also use other methods above.
import '@kwooshung/react-overlay-scrollbars-smooth/dist/react-overlay-scrollbars-smooth.css';
function App() {
return (
<div style={{ height: '300px' }}>
<OverlayScrollbarsSmooth>
<div style={{ height: '1000px' }} />
</OverlayScrollbarsSmooth>
</div>
);
}If you want it to work on Body, you can do this:
import { OverlayScrollbarsSmooth } from '@kwooshung/react-overlay-scrollbars-smooth';
function App() {
// No matter where this line of code is written, as long as `tag=body`, it will act on `Body`, thus replacing the default scroll bar. Don’t forget to include styles!
return <OverlayScrollbarsSmooth tag='body' />;
}hooks
You can directly use useSmoothScroll to achieve smooth scrolling, which will cause all scroll bars to become smooth. It is recommended to call it once in a place such as global layout, as shown below:
import { OverlayScrollbarsSmooth, useSmoothScroll } from '@kwooshung/react-overlay-scrollbars-smooth';
import '@kwooshung/react-overlay-scrollbars-smooth/dist/react-overlay-scrollbars-smooth.css';
function App() {
useSmoothScroll();
return (
<div style={{ height: '300px' }}>
<OverlayScrollbarsSmooth>
<div style={{ height: '1000px' }} />
</OverlayScrollbarsSmooth>
</div>
);
}API
OverlayScrollbarsSmooth
The OverlayScrollbarsSmooth component supports all OverlayScrollbars APIs, you can view OverlayScrollbars API here.
| Properties | Description |
|---|---|
| tag | string, default value: div, if it is: body, acts on Body, thus replacing the default scroll bar. element equivalent to OverlayScrollbars; |
| className | string, default value: '', custom class name; invalid when tag=body; |
| options | Equivalent to options of OverlayScrollbars, default: {scrollbars: {theme: 'os-theme-dark'}} |
| events | Equivalent to events of OverlayScrollbars, default: {} |
useSmoothScroll
Supports all parameters of smoothscroll-for-websites except excluded, you can view it here smoothscroll-for-websites API , the following parameters are also default values (it is slightly different from the default value of smoothscroll-for-websites), you can modify it according to your own needs, as shown below
import { OverlayScrollbarsSmooth, useSmoothScroll } from '@kwooshung/react-overlay-scrollbars-smooth';
import '@kwooshung/react-overlay-scrollbars-smooth/dist/react-overlay-scrollbars-smooth.css';
function App() {
useSmoothScroll({
// Scrolling Core
frameRate: 150, // [ms]
animationTime: 1000, // [ms]
stepSize: 100, // [px]
// Pulse (less tweakable)
// ratio of "tail" to "acceleration"
pulseAlgorithm: true,
pulseScale: 4,
pulseNormalize: true,
// Acceleration
accelerationDelta: 50,
accelerationMax: 3,
// Keyboard Settings
keyboardSupport: true,
arrowScroll: 50,
// Other
touchpadSupport: false, // ignore touchpad by default
fixedBackground: true
});
return (
<div style={{ height: '300px' }}>
<OverlayScrollbarsSmooth>
<div style={{ height: '1000px' }} />
</OverlayScrollbarsSmooth>
</div>
);
}Open source projects used
Thanks to the project authors for their selfless contributions to the open source community, making our work easier! ! !
- OverlayScrollbars:Excellent scroll bar custom component
- smoothscroll-for-websites:Excellent scroll bar smoothing script