Package Exports
- ngx-scrollbar
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ngx-scrollbar) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Angular Custom Scrollbar
Custom overlay-scrollbars with native scrolling mechanism for Angular, it also provides a cross-browser smooth scroll directive.
Table of Contents
- Live Demo
- Installation
- Usage
- Options
- Dynamic scrolling
- Smooth scroll
- Development
- Issues
- Author
- Credit
- More plugins
Installation
NPM
npm i -S ngx-scrollbar @angular/cdk
YARN
yarn add ngx-scrollbar @angular/cdk
SystemJS
If you are using SystemJS, you should also adjust your configuration to point to the UMD bundle.
In your systemjs config file, map needs to tell the System loader where to look for ngx-scrollbar
:
map: {
'ngx-scrollbar': 'node_modules/ngx-scrollbar/bundles/ngx-scrollbar.umd.js',
}
Here is a stackblitz
Usage
Import NgScrollbarModule
in your module
import { NgScrollbarModule } from 'ngx-scrollbar';
@NgModule({
imports: [
// ...
NgScrollbarModule
]
})
In your template
<ng-scrollbar>
<!-- Content -->
</ng-scrollbar>
Options
Scrollbar inputs
[trackX]: boolean
Horizontal scrollbar, default
false
[trackY]: boolean
Vertical scrollbar, default
true
[autoHide]: boolean
Show scrollbar on mouse hover only, default
false
[autoUpdate]: boolean
Auto-update scrollbars on content changes, default:
true
[viewClass]: string
Add custom class to the view, default:
null
[barClass]: string
Add custom class to scrollbars, default:
null
[thumbClass]: string
Add custom class to scrollbars' thumbnails, default:
null
[barScrollToDuration]: number
The smooth scroll duration when a scrollbar is clicked, default
400
.[disableOnBreakpoints]: Array of the CDK Breakpoints
Disable custom scrollbars on specific breakpoints, default:
[Breakpoints.HandsetLandscape, Breakpoints.HandsetPortrait]
Because it is not possible to hide the native scrollbars on mobile browsers, the only solution is to fallback to the native scrollbars, to disable this option give it false value.
Scrollbar functions
To use NgScrollbar functions, you will need to get the component reference from the template. this can be done using the @ViewChild
decorator, for example:
@ViewChild(ScrollbarComponent) scrollRef: NgScrollbar;
Update scrollbars manually
Sometimes the content changes, if the autoUpdate
feature did not catch them or it was disabled, you can still update the scrollbars manually, for example:
scrollRef.update()
Scroll functions
All scroll functions return a cold observable that requires calling subscribe()
, it will emits once scrolling is done and unsubscribe itself, no need to unsubscribe from the function manually.
Scroll to position
scrollRef.scrollTo(options: ScrollToOptions).subscribe()
- Left: x position.
- Top: y position.
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Scroll to element
scrollRef.scrollToElement(selector, duration?, easeFunc?).subscribe()
- Selector: target element selector.
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Scroll horizontally
scrollRef.scrollXTo(position, duration?, easeFunc?).subscribe()
- Position: scrolling position on X axis in pixels.
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Scroll vertically
scrollRef.scrollYTo(position, duration?, easeFunc?).subscribe()
- Position: scrolling position on Y axis in pixels.
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Scroll to top
scrollRef.scrollToTop(duration?, easeFunc?).subscribe()
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Scroll to bottom
scrollRef.scrollToBottom(duration?, easeFunc?).subscribe()
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Scroll to left
scrollRef.scrollToLeft(duration?, easeFunc?).subscribe()
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Scroll to right
Observable that emits once scrolling to right is done
scrollRef.scrollToRight(duration?, easeFunc?).subscribe(() => {
console.log('scrollToRight is done')
})
- Duration: time to reach position in milliseconds, default null.
- EaseFunc: the easing function for the smooth scroll.
Dynamic scrolling example
Scroll to top directly from the template
<ng-scrollbar #scrollbarRef>
<!-- Content -->
</ng-scrollbar>
<button (click)="scrollbarRef.scrollToTop(500)">Scroll to top</button>
Or using the @ViewChild
decorator
@ViewChild(ScrollbarComponent) scrollRef: ScrollbarComponent;
scrollToTop() {
this.scrollRef.scrollToElement('#usage');
}
Scroll to top on route change
export class AppComponent implements OnInit {
@ViewChild(ScrollbarComponent) scrollRef: ScrollbarComponent;
constructor(private router: Router) {
}
ngOnInit() {
this.router.events
.filter(event => event instanceof NavigationEnd)
.subscribe((event: NavigationEnd) => {
if (this.scrollRef) {
this.scrollRef.scrollToTop();
}
});
}
}
Smooth Scroll Module
In version 3.0.0, The SmoothScrollModule
has been added as an independent module
import { SmoothScrollModule } from 'ngx-scrollbar';
@NgModule({
imports: [
// ...
SmoothScrollModule
]
})
Use the [smoothScroll]
directive on a scrollable container.
<div smoothScroll #scrollable class="scrollable-container}">
<!-- child elements -->
</div>
<button (click)="scrollable.scrollToBottom(500)">Scroll to bottom</button>
Development
This project uses the Angular CLI for building the library.
$ ng build ngx-scrollbar --prod
or
$ npm run build-lib
Issues
If you identify any errors in the library, or have an idea for an improvement, please open an issue.
Author
Credit
- Inspired by gemini-scrollbar.