- If you want smooth scrolling, use
smooth-scrollbar; - If you want customizable scrollbars, use
smooth-scrollbar; - If you want high-performance scrollbars, use
smooth-scrollbar; - If you want incredibly prompt user support, use
smooth-scrollbar; - If you want perfect scrollbar in modern browsers, use
smooth-scrollbar!
So, why would you still use other scrollbar plugins? All you need is a quick setup:
Via npm:
npm install smooth-scrollbar --save
Via bower:
bower install smooth-scrollbar --save
| Browser | Version |
|---|---|
| IE | 10+ |
| Chrome | 22+ |
| Firefox | 16+ |
| Safari | 8+ |
| Android Browser | 4+ |
| Chrome for Android | 32+ |
| iOS Safari | 7+ |
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. |
| friction | Number | 10 | Scrolling friction, a percentage value within (1, 100). |
| thumbMinSize | Number | 20 | Minimal size for scrollbar thumb. |
| renderByPixels | Boolean | true | Render scrolling by integer pixels, set to true to improve performance. |
| continuousScrolling | Boolean|String | 'auto' | Whether allow upper scrollable content to continue scrolling when current scrollbar reaches edge. When set to 'auto', it will be enabled on nested scrollbars, and disabled on first-class scrollbars. |
Confusing with the option field? Try edit 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, [withoutCallbacks] )
- instance#scrollTo( x, y, [duration], [callback] )
- instance#scrollIntoView( elem, [options] )
- instance#isVisible( elem )
- instance#addListener( fn )
- instance#removeListener( fn )
- instance#unregisterEvents( regex [, regex [,...regex] ] )
- instance#registerEvents( regex [, regex [,...regex] ] )
- instance#infiniteScroll( callback, [threshold] )
- instance#clearMovement()
- instance#stop()
- instance#destroy()
- instance#getContentElem()
- instance#showTrack( [direction] )
- instance#hideTrack( [direction] )
- Overscroll effect.
-
Create an issue with an example on jsbin.com, including latest version of
smooth-scrollbarthrough:<link rel="stylesheet" href="https://cdn.rawgit.com/idiotWu/smooth-scrollbar/master/dist/smooth-scrollbar.css"> <script src="https://cdn.rawgit.com/idiotWu/smooth-scrollbar/master/dist/smooth-scrollbar.js"></script>
-
Fork the repo and modify the code if you have better ideas, create a pull request into
developbranch after you've done.
MIT.