Customize scrollbar in modern browsers with smooth scrolling experience.
Browser | Version |
---|---|
IE | 10+ |
Chrome | 22+ |
Firefox | 16+ |
Safari | 8+ |
Android Browser | 4+ |
Chrome for Android | 32+ |
iOS Safari | 7+ |
Via npm:
npm install smooth-scrollbar --save
Via bower:
bower install smooth-scrollbar --save
http://idiotwu.github.io/smooth-scrollbar/
As is explained in this article, browser repaint every frame in scrolling. Less painting is better.
To avoid repainting, I use translate3d
in scroll content to create composite layers and force hardware accelerating.
Smooth scrollbar is defined as an UMD module which named Scrollbar
, you can use any loader to load it:
import Scrollbar from 'smooth-scrollbar';
Or get it from window
object:
const { Scrollbar } = window;
Don't forget to include the stylesheet in your page:
<link rel="stylesheet" href="dist/smooth-scrollbar.css">
Here're three ways to tell the plugin which element should be a smooth scrollbar:
-
As an element:
<scrollbar> ... </scrollbar>
-
As an attribute:
<section scrollbar> ... </section>
-
As a data attribute
<section data-scrollbar> ... </section>
Then init all scrollbars:
Scrollbar.initAll(options);
Or you can call Scrollbar.init(elem, options)
to manually init the scrollbar.
parameter | type | default | description |
---|---|---|---|
speed | Number | 1 | Scrolling speed scale. |
fricton | Number | 10 | Scrolling fricton, a percentage value within (1, 100) |
Confusing with the option field? Try editor tool here!
Following is the DOM structure that Scrollbar generated:
<scrollbar>
<article class="scroll-content">
your contents here...
</article>
<aside class="scrollbar-track scrollbar-track-x">
<div class="scrollbar-thumb scrollbar-thumb-x"></div>
</aside>
<aside class="scrollbar-track scrollbar-track-y">
<div class="scrollbar-thumb scrollbar-thumb-y"></div>
</aside>
</scrollbar>
- Scrollbar.init( element, [options] )
- Scrollbar.initAll( [options] )
- Scrollbar.has( element )
- Scrollbar.get( element )
- Scrollbar.getAll()
- Scrollbar.destroy( element )
- Scrollbar.destroyAll()
- instance#update( [async] )
- instance#getSize()
- instance#setPosition( x, y )
- instance#scrollTo( x, y, [duration], [callback] )
- instance#addListener( fn )
- instance#removeListener( fn )
- instance#infiniteScroll( callback, [threshold] )
- instance#destroy()
- instance#getContentElem()
- instance#showTrack( direction )
- instance#hideTrack()
Work with RubaXa/Sortable
Details here.
- Overscroll effect.
- Reduce movement at container's edge.
- Movement based scrolling algorithm.
- Reduce options, simple is better :)
- Use quadratic curve to perform
scrollTo
method.
- New easing algorithm.
- Dependency free!
MIT.