@cristiansarghe/ng-generic-carousel v14.0.0
Generic Angular Carousel Component
What is it?
@cristiansarghe/ng-generic-carousel is a lightweight, mobile device friendly Angular carousel component made for ANY type of content, NOT only images.
Changelog
Version 3.0.0
- Angular 12 support
- Added drag-drop navigation support for mouse and touch inputs (HammerJS is a new dependency)
- Changed navigation button hiding logic (includes changes to
Input()parameters)
Version 2.0.0
- Updated package to Angular 12
- Added round navigation option (when reaching the left or right side of the elements list, continue from the other side)
Installation
npm i @cristiansarghe/ng-generic-carousel
Basic usage
The component works by having a HTML template passed, along with an array of elements. By default, the component shows 3 elements at once.
<ng-generic-carousel [elements]="['John', 'Joanne', 'Jason', 'Jessica']">
<ng-template #contentTemplate let-data="data">
<p>I am {{data}}</p>
</ng-template>
<ng-template #leftButtonTemplate> < </ng-template>
<ng-template #rightButtonTemplate> > </ng-template>
</ng-generic-carousel>ng-generic-carouselreceives an array of objects or primitive values through@Input() elements.The component iterates through the array and repeats
contentTemplatefor each item.To access the current item you can target the
datavariable (let-data="data"), as presented above, and then use it within the template.For a more generic approach,
leftButtonTemplateandrightButtonTemplatemust be specified in order to customize the look of the left and right buttons.
Customization
Content
- The
contentTemplate-namedng-templateprovides the layout for each carousel element. - The
leftButtonTemplateandrightButtonTemplateelements provide the content for the buttons (in order to customize the arrows as desired). @Input() visibleElementsCountchanges the number of elements shown at once on the screen.- NOTE: By default, if
elementshas less items than specified byvisibleElementsCount, the left and right scroll buttons will NOT be shown. You can change this behavior by modifying@Input() hideNavigationButtonsWhenNotNeededtofalse. - In order to hide the navigation buttons at all times, set the
hideNavigationButtonsinput totrue. This usually works with the drag-drop navigation (seeisDragDropEnabledinput)
Example:
<ng-generic-carousel [elements]="['John', 'Joanne', 'Jason', 'Jessica']" [visibleElementsCount]="6" [hideNavigationButtons]="true" [isDragDropEnabled]="true">
<ng-template #contentTemplate let-data="data">
<p>I am {{data}}</p>
</ng-template>
<ng-template #leftButtonTemplate> < </ng-template> <!-- Will not be shown -->
<ng-template #rightButtonTemplate> > </ng-template> <!-- Will not be shown -->
</ng-generic-carousel>Placeholders
- The carousel can as well have placeholders that look all the same, with a layout provided in
placeholderTemplate. - The placeholders appear only if
elementsis null or empty. - The number of placeholders is 3 by default, but can be changed using
@Input() placeholderElementsCount.
<ng-generic-carousel [elements]="[]" [placeholderElementsCount]="4">
<ng-template #contentTemplate let-data="data">
<p>I am {{data}}</p>
</ng-template>
<ng-template #placeholderTemplate>
<p>This will be a name!</p>
</ng-template>
<ng-template #leftButtonTemplate> < </ng-template>
<ng-template #rightButtonTemplate> > </ng-template>
</ng-generic-carousel>@Input()
| Input | Type | Required | Description |
|---|---|---|---|
| elements | any[] | Optional, default: [] | Array of objects or primitive values that represent each carousel item |
| placeholderElementsCount | number | Optional, default: 3 | If placeholders are shown, this input sets how many placeholder elements to show |
| visibleElementsCount | number | Optional, default: 3 | Number of visible elements at a time |
| isRoundNavigation | boolean | Optional, default: false | Enable round carousel navigation (when left or right limits are reached, navigate to each other) |
| hideNavigationButtons | boolean | Optional, default: false | Force hide left and right navigation buttons (all the time, can be used with isDragDropEnabled) |
| hideNavigationButtonsWhenNotNeeded | boolean | Optional, default: true | Hide left and right navigation buttons when navigation can not be done due to the little number of elements |
| isDragDropEnabled | boolean | Optional, default: true | Enable drag-drop navigation (without using the left and right buttons) |
| stickToClosestElement | boolean | Optional, default: true | Stick navigation view window to closest element edge after drag-drop movement |
@Output()
| Output | Type | Description |
|---|---|---|
| hasMoved | boolean | Emits true when drag movement starts and false 200ms after drag ends; can be watched and used to prevent carousel element clicks or trigger other actions after drag ends |
ng-template
| Template | Description |
|---|---|
| contentTemplate | Template for each carousel item |
| placeholderTemplate | Template for each placeholder item |
| leftButtonTemplate | Template for left scroll button |
| rightButtonTemplate | Template for right scroll button |