@emotionagency/emotion-scroll
TypeScript icon, indicating that this package has built-in type declarations

1.0.9 • Public • Published

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;
  }
}

Package Sidebar

Install

npm i @emotionagency/emotion-scroll

Weekly Downloads

7

Version

1.0.9

License

MIT

Unpacked Size

37.5 kB

Total Files

19

Last publish

Collaborators

  • lkosteckyi