angular-responsive-carousel-ng16
Version:
Carousel for Angular. A simple solution for horizontal scrolling images with lazy loading.
141 lines • 15.6 kB
JavaScript
export class Carousel {
get cellLength() {
return this.cells.cellLength;
}
get cellLengthInLightDOMMode() {
if (this.images) {
let cellLength = this.numberOfVisibleCells + this.overflowCellsLimit * 2;
if (cellLength > this.images.length) {
cellLength = this.images.length;
}
return cellLength;
}
else {
return this.cellLength;
}
}
get lastCellIndex() {
return this.images.length ? (this.images.length - 1) : (this.cells.cellLength - 1);
}
get overflowCellsLimit() {
return this.utils.overflowCellsLimit;
}
get cellLimit() {
if (this.isLightDOM) {
let cellLimit = this.numberOfVisibleCells + this.overflowCellsLimit * 2;
if (cellLimit < this.numberOfVisibleCells) {
cellLimit = this.numberOfVisibleCells;
}
return cellLimit;
}
else {
return this.properties.images.length;
}
}
get isLightDOM() {
return this.properties.lightDOM || this.properties.loop;
}
get images() {
return this.properties.images;
}
get margin() {
return this.properties.margin;
}
get minSwipeDistance() {
return this.properties.minSwipeDistance;
}
get transitionDuration() {
return this.properties.transitionDuration;
}
get transitionTimingFunction() {
return this.properties.transitionTimingFunction;
}
get fullCellWidth() {
return this.properties.cellWidth + this.margin;
}
get numberOfVisibleCells() {
return this.utils.numberOfVisibleCells;
}
get lapCounter() {
return Math.floor(this.slide.counter / this.cellLengthInLightDOMMode);
}
get slideCounter() {
return this.slide.counter;
}
constructor(properties, utils, cells, container, slide) {
this.properties = properties;
this.utils = utils;
this.cells = cells;
this.container = container;
this.slide = slide;
/* The slide length has been limited by the limitSlideLength() method */
this.isSlideLengthLimited = false;
this.isContentImages = true;
this.isLazyLoad = true;
this.isContainerLocked = true;
this.alignCells = "left";
this.initialContainerPosition = 0;
this.containerPullLimit = 100;
this.handleTouchstart = (event) => {
this.container.handleTouchstart();
this.slide.handleTouchstart(event);
};
this.handleHorizontalSwipe = (event) => {
this.container.handleHorizontalSwipe();
};
this.handleTouchend = (event) => {
if (this.properties.freeScroll) {
this.container.handleTouchend();
}
else {
this.container.handleTouchend(true);
this.slide.handleTouchend(event);
}
};
this.isNextArrowDisabled = () => {
return this.slide.isNextArrowDisabled();
};
this.isPrevArrowDisabled = () => {
return this.slide.isPrevArrowDisabled();
};
this.init();
}
updateProperties(properties) {
this.properties = properties;
}
init() {
this.cellsElement = this.properties.cellsElement;
this.visibleWidth = this.properties.visibleWidth || this.cellsElement.parentElement.clientWidth;
}
destroy() {
clearInterval(this.autoplayId);
}
lineUpCells() {
this.cells.lineUp();
}
handleTransitionend() {
this.slide.handleTransitionend();
}
getImage(index) {
return this.cells.getImage(index);
}
next(length = 1) {
if (!this.isNextArrowDisabled()) {
this.slide.next(length);
}
}
prev(length = 1) {
this.slide.prev(length);
}
autoplay() {
this.autoplayId = setInterval(() => {
this.next();
}, this.properties.autoplayInterval);
}
stopAutoplay() {
if (this.autoplayId) {
clearInterval(this.autoplayId);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXJlc3BvbnNpdmUtY2Fyb3VzZWwtbmcxNi9zcmMvbGliL2Nhcm91c2VsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxRQUFRO0lBZWpCLElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksd0JBQXdCO1FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUNqQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDbkM7WUFDRCxPQUFPLFVBQVUsQ0FBQztTQUNyQjthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJ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QUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFpQixDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFVRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1Byb3BlcnRpZXN9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBDYXJvdXNlbCB7XG4gICAgY2VsbHNFbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAgIC8qIFRoZSBzbGlkZSBsZW5ndGggaGFzIGJlZW4gbGltaXRlZCBieSB0aGUgbGltaXRTbGlkZUxlbmd0aCgpIG1ldGhvZCAqL1xuICAgIGlzU2xpZGVMZW5ndGhMaW1pdGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBpc0NvbnRlbnRJbWFnZXM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHZpc2libGVXaWR0aCE6IG51bWJlcjtcbiAgICBpc0xhenlMb2FkOiBib29sZWFuID0gdHJ1ZTtcbiAgICBpc0NvbnRhaW5lckxvY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gICAgYWxpZ25DZWxsczogXCJsZWZ0XCIgfCBcImNlbnRlclwiID0gXCJsZWZ0XCI7XG4gICAgaW5pdGlhbENvbnRhaW5lclBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICAgIGF1dG9wbGF5SWQ6IGFueTtcbiAgICBjb250YWluZXJQdWxsTGltaXQgPSAxMDA7XG5cbiAgICBnZXQgY2VsbExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbHMuY2VsbExlbmd0aDtcbiAgICB9XG5cbiAgICBnZXQgY2VsbExlbmd0aEluTGlnaHRET01Nb2RlKCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZXMpIHtcbiAgICAgICAgICAgIGxldCBjZWxsTGVuZ3RoID0gdGhpcy5udW1iZXJPZlZpc2libGVDZWxscyArIHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0ICogMjtcbiAgICAgICAgICAgIGlmIChjZWxsTGVuZ3RoID4gdGhpcy5pbWFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2VsbExlbmd0aCA9IHRoaXMuaW1hZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjZWxsTGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VsbExlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBsYXN0Q2VsbEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMubGVuZ3RoID8gKHRoaXMuaW1hZ2VzLmxlbmd0aCAtIDEpIDogKHRoaXMuY2VsbHMuY2VsbExlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGdldCBvdmVyZmxvd0NlbGxzTGltaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0aWxzLm92ZXJmbG93Q2VsbHNMaW1pdDtcbiAgICB9XG5cbiAgICBnZXQgY2VsbExpbWl0KCkge1xuICAgICAgICBpZiAodGhpcy5pc0xpZ2h0RE9NKSB7XG4gICAgICAgICAgICBsZXQgY2VsbExpbWl0ID0gdGhpcy5udW1iZXJPZlZpc2libGVDZWxscyArIHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0ICogMjtcblxuICAgICAgICAgICAgaWYgKGNlbGxMaW1pdCA8IHRoaXMubnVtYmVyT2ZWaXNpYmxlQ2VsbHMpIHtcbiAgICAgICAgICAgICAgICBjZWxsTGltaXQgPSB0aGlzLm51bWJlck9mVmlzaWJsZUNlbGxzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2VsbExpbWl0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5pbWFnZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGlzTGlnaHRET00oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGlnaHRET00gfHwgdGhpcy5wcm9wZXJ0aWVzLmxvb3A7XG4gICAgfVxuXG4gICAgZ2V0IGltYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5pbWFnZXM7XG4gICAgfVxuXG4gICAgZ2V0IG1hcmdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5tYXJnaW47XG4gICAgfVxuXG4gICAgZ2V0IG1pblN3aXBlRGlzdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubWluU3dpcGVEaXN0YW5jZTtcbiAgICB9XG5cbiAgICBnZXQgdHJhbnNpdGlvbkR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG5cbiAgICBnZXQgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBnZXQgZnVsbENlbGxXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5jZWxsV2lkdGggKyB0aGlzLm1hcmdpbjtcbiAgICB9XG5cbiAgICBnZXQgbnVtYmVyT2ZWaXNpYmxlQ2VsbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0aWxzLm51bWJlck9mVmlzaWJsZUNlbGxzO1xuICAgIH1cblxuICAgIGdldCBsYXBDb3VudGVyKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnNsaWRlLmNvdW50ZXIgLyB0aGlzLmNlbGxMZW5ndGhJbkxpZ2h0RE9NTW9kZSk7XG4gICAgfVxuXG4gICAgZ2V0IHNsaWRlQ291bnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGUuY291bnRlcjtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzLFxuICAgICAgICBwcml2YXRlIHV0aWxzOiBhbnksXG4gICAgICAgIHByaXZhdGUgY2VsbHM6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBjb250YWluZXI6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBzbGlkZTogYW55KSB7XG5cbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5jZWxsc0VsZW1lbnQgPSB0aGlzLnByb3BlcnRpZXMuY2VsbHNFbGVtZW50O1xuICAgICAgICB0aGlzLnZpc2libGVXaWR0aCA9IHRoaXMucHJvcGVydGllcy52aXNpYmxlV2lkdGggfHwgdGhpcy5jZWxsc0VsZW1lbnQhLnBhcmVudEVsZW1lbnQhLmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvcGxheUlkKTtcbiAgICB9XG5cbiAgICBsaW5lVXBDZWxscygpIHtcbiAgICAgICAgdGhpcy5jZWxscy5saW5lVXAoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVUb3VjaHN0YXJ0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuaGFuZGxlVG91Y2hzdGFydCgpO1xuICAgICAgICB0aGlzLnNsaWRlLmhhbmRsZVRvdWNoc3RhcnQoZXZlbnQpO1xuICAgIH1cblxuICAgIGhhbmRsZUhvcml6b250YWxTd2lwZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmhhbmRsZUhvcml6b250YWxTd2lwZSgpO1xuICAgIH1cblxuICAgIGhhbmRsZVRvdWNoZW5kID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5mcmVlU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5oYW5kbGVUb3VjaGVuZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuaGFuZGxlVG91Y2hlbmQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlLmhhbmRsZVRvdWNoZW5kKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVRyYW5zaXRpb25lbmQoKSB7XG4gICAgICAgIHRoaXMuc2xpZGUuaGFuZGxlVHJhbnNpdGlvbmVuZCgpO1xuICAgIH1cblxuICAgIGdldEltYWdlKGluZGV4Om51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxscy5nZXRJbWFnZShpbmRleCk7XG4gICAgfVxuXG4gICAgbmV4dChsZW5ndGg6IG51bWJlciA9IDEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTmV4dEFycm93RGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5zbGlkZS5uZXh0KGxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2KGxlbmd0aDogbnVtYmVyID0gMSkge1xuICAgICAgICB0aGlzLnNsaWRlLnByZXYobGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpc05leHRBcnJvd0Rpc2FibGVkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZS5pc05leHRBcnJvd0Rpc2FibGVkKCk7XG4gICAgfVxuXG4gICAgaXNQcmV2QXJyb3dEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGUuaXNQcmV2QXJyb3dEaXNhYmxlZCgpO1xuICAgIH1cblxuICAgIGF1dG9wbGF5KCkge1xuICAgICAgICB0aGlzLmF1dG9wbGF5SWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgfSwgdGhpcy5wcm9wZXJ0aWVzLmF1dG9wbGF5SW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIHN0b3BBdXRvcGxheSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b3BsYXlJZCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9wbGF5SWQpO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==