ng-page-slider
Version:
Mimicks the functionality of UIPageViewController in pure HTML for mobile web apps with Angular 2.
198 lines (164 loc) • 6.53 kB
Markdown
**Mimicks the functionality of UIPageViewController in pure HTML for mobile web apps, using
DOM recycling and CSS3 transitions for near-native performance. Built with Angular 4, and
designed to work seamlessly in normal NG2 templates.**
*Designed for Angular 2.3.0+ and 4.0.0+*
### Live Demo
https://keatontech.github.io/Angular-2-Page-Slider/
# Example Usage
### Installation
```
npm install --save ng2-page-slider
```
### Typescript - NG2 Mobile Slider
```typescript
import {Component, NgModule} from '@angular/core';
import {PageSliderModule} from 'ng2-page-slider';
@Component({
selector: 'example-component',
template: `
<kb-page-slider>
<div *kbPages="let page of pages" class="page" [style.background]="page.color">
<h1>{{page.title}}</h1>
</div>
</kb-page-slider>
`
})
export class ExampleComponent {
public pages = [
{title: "Page 1", color: "red"},
{title: "Page 2", color: "green"}
];
}
@NgModule({
imports: [
PageSliderModule
],
declarations: [
ExampleComponent
]
})
export class ExampleModule {
}
```
### Typescript - NG2 Desktop Hero w/ Buttons
```typescript
import {Component, NgModule} from '@angular/core';
import {PageSliderModule} from 'ng2-page-slider';
@Component({
selector: 'example-component',
template: `
<kb-page-slider [overlayIndicator]="false" dotColor="black"
[(page)]="pageNumber" (pageCountChange)="pageCount = $event">
<!-- Pages -->
<div *kbPages="let page of pages" [style.background]="page.image"></div>
<!-- Navigation Buttons -->
<kb-nav-button backward [showBackground]="true"
[(page)]="pageNumber" [pageCount]="pageCount">
</kb-nav-button>
<kb-nav-button forward [showBackground]="true"
[(page)]="pageNumber" [pageCount]="pageCount">
</kb-nav-button>
</kb-page-slider>
`
})
export class ExampleComponent {
public pageNumber : number = 0;
public pageCount : number = 0;
public pages = [
{image: "http://asset.url/1.png"},
{image: "http://asset.url/2.png"}
];
}
@NgModule({
imports: [
PageSliderModule
],
declarations: [
ExampleComponent
]
})
export class ExampleModule {
}
```
*It should also be possible to use this component from JS-based NG2 apps from index.js,
although I have not gotten the chance to test that.*
# API
## KBPageSliderComponent (kb-page-slider)
Container component for pages. Optionally includes a KBDotIndicatorComponent at the bottom.
Handles touch events, resizing and animation.
### Input Properties
* **page:** Current page number, zero-based index.
* Allows two-way data binding
* Must be a number 0 <= page < pageCount
* Defaults to 0
* **transitionDuration:** In the absence of scrolling momentum, how long should a transition take?
* Expressed as an integer number of milliseconds >= 0
* Defaults to 250ms
* **locked:** When true, page scrolling is disabled
* Boolean, defaults to false
* **showIndicator:** When true, includes a dot indicator at the bottom.
* Boolean, defaults to true
* **overlayIndicator:** When true, renders indicator above the page content.
* Boolean, defaults to true
* **dotColor:** Color of the active page dot (other dots are the same color but more transparent)
* CSS Color string (color name, hex, rgb, or rgba)
* Defaults to white
* **enableOverscroll:** When true, user can scroll slightly past the first and last page.
* Boolean, defaults to true
* **enableSideClicks:** When true, clicking near the edge of a page will cause page navigation.
* Boolean, defaults to true
* **enableArrowKeys:** When true, the left and right arrow keys will cause page navigation.
* Boolean, defaults to true
### Instance Properties
* **pageCount:** Total number of pages, determined by KBPagesRendererDirective.
* *Read-only* instance property
* Observe with pageCountChange
* Number >= 0
* **pageWidth / pageHeight:** Pixel size of an individual page
* *Read-only* instance properties
* Observe with pageSizeChange
## KBPagesRendererDirective (kbPages)
Renders pages using DOM recycling, so only at most 3 exist on the DOM at any given time
(previous, current, next). Modeled on ngFor, uses the exact same looping syntax.
*It's probably kind of annoying to make this work if you want a fixed set of premade pages,
instead of a loop over a set of data. It'd work but, in the future it might be good to add
an alternative directive for that use case.*
### Provided Loop Variables
These variables are available inside of kbPages, similar to ngFor loop items.
* **index:** *number* Zero-based index of the current page.
* **isFirst:** *boolean* True when the page is the first page.
* **isLast:** *boolean* True when the page is the last page.
* **isActive:** *boolean* True when the page is currently being viewed by the user.
## KBDotIndicatorComponent (kb-dot-indicator)
Indicates the current page and the total number of pages using dots, in a style popularized
by iOS. Scrolls smoothly when the number of pages exceeds the number of dots that can fit on
the screen. Can be used independantly of KBPageSliderComponent.
### Properties
* **page:** Current page number, zero-based index.
* Must be a number 0 <= page < pageCount
* **pageCount:** Total number of pages, determined by KBPagesRendererDirective.
* Number >= 0
* **dotColor:** Color of the active page dot (other dots are the same color but more transparent)
* CSS Color string (color name, hex, rgb, or rgba)
* Defaults to white
## KBNavButtonComponent (kb-nav-button)
Customizable chevron button that can be linked to KBPageSliderComponent. Automatically
disables on first or last page. Must be used with either a `forward` or `backward`
attribute to specify direction.
### Input Properties
* **page:** Current page number, zero-based index.
* Allows two-way data binding
* Must be a number 0 <= page < pageCount
* **pageCount:** Used to automatically disable the forward button on the last page
* Must be a number greater than 0
* **size:** Pixel size of the button (applies to both width and height)
* Expressed as an integer number of pixels >= 0
* Defaults to 44px
* **showBackground:** When true, show a circular background and drop shadow, a la material design
* Boolean, defaults to false
* **iconColor:** Color of the chevron icon
* CSS Color string (color name, hex, rgb, or rgba)
* Defaults to white when showBackground is false and black when it's true
* **backgroundColor:** Color of the circular background, when showBackground is true
* CSS Color string (color name, hex, rgb, or rgba)
* Defaults to white