@emotionagency/emotion-scroll
v1.0.9
Published
A library that animates the native scroll value using Virtual Scroll and custom scrollbar
Downloads
16
Maintainers
Readme
A library that animates the native scroll value using Virtual Scroll and custom scrollbar
Instalation
npm i @emotionagency/emotion-scroll
or
yarn add @emotionagency/emotion-scroll
Usage
Basic example
import EmotionScroll from '@emotionagency/emotion-scroll'
const scroll = new EmotionScroll()
Destroy instance
import EmotionScroll from '@emotionagency/emotion-scroll'
const scroll = new EmotionScroll()
scroll.destroy()
Instance options
| Option | Type | Default | Description |
| ----------------------- | --------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| el
| DOM el
| #scroll-container
| Scroll container element. |
| touchMultiplier
| number
| 3.8
| Mutiply the touch action by this modifier to make scroll faster than finger movement (Virtual Scroll API). |
| firefoxMultiplier
| number
| 40
| Firefox on Windows needs a boost, since scrolling is very slow.|
| preventTouch
| boolean
| true
| If true, automatically call e.preventDefault on touchMove.
| scrollbar
| boolean
| true
| Custom scrollbar.
| friction
| number
| 0.08
| Factor that affects the speed and smoothness of the scroll animation.
| stepSize
| number
| 1
| A coefficient that affects the distance that will be scrolled at one time. The smaller the coefficient, the shorter the distance.
| breakpoint
| number
| null
| If you pass a numeric value here, the smooth scroll will work until this breakpoint.
| saveScrollPosition
| boolean
| false
| Saving scroll position after page reload
| disabled
| boolean
| false
| Disabling scroll
| useKeyboard
| boolean
| true
| Ability to scroll the page using the keys (tab, space, arrows)
| maxScrollDelta
| number
| 120
| What is the maximum number of pixels that can be scrolled in one scroll of the mouse wheel
Reset scroll position
(for example, can be called when navigating between pages)
import EmotionScroll from '@emotionagency/emotion-scroll'
const scroll = new EmotionScroll()
scroll.reset()
Scrolling hook
import EmotionScroll from '@emotionagency/emotion-scroll'
const scroll = new EmotionScroll()
scroll.on(({direction, position, progress, velocity}) => {
console.log({direction, position, progress, velocity})
})
Recomended styles
Scroll Container
.e-fixed {
overflow: hidden !important;
}
#scroll-container {
will-change: scroll-position;
overflow: hidden;
@media (max-width: $br1) {
overflow-x: hidden;
overflow-y: auto;
}
}
Scrollbar
/* Hide scrollbar for Chrome, Safari and Opera */
#scroll-container::-webkit-scrollbar {
display: none;
}
/* Hide scrollbar for IE, Edge and Firefox */
#scroll-container {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
.scrollbar {
position: fixed;
right: 0;
top: 0;
z-index: 10000000 !important;
height: 100vh;
height: 100dvh;
width: 12px;
user-select: none;
overflow: hidden;
padding: 2px;
padding-left: 0px;
@media screen and (min-width: 960px)) {
&:hover {
.scrollbar__thumb {
width: 10px;
opacity: 0.7;
border-radius: 10px;
background-color: #9047ff;
}
}
}
&.hidden {
display: none;
}
}
.scrollbar__thumb {
width: 6px;
border-radius: 7px;
pointer-events: none;
height: 100px;
background: #6b6b6b;
display: block;
position: relative;
user-select: none;
transition: width 0.2s ease, opacity 0.3s ease, border-radius 0.3s ease,
background-color 0.3s ease;
right: 0;
opacity: 0;
float: right;
&.scrolling {
opacity: 0.7;
}
&.active {
width: 10px;
opacity: 0.7;
border-radius: 10px;
background-color: #9047ff;
}
}