ng2-page-transition
Version:
Simple Angular2 component that creates a page transition animation on route changes
157 lines (150 loc) • 7 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/router')) :
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@angular/router'], factory) :
(factory((global['ng2-page-transition'] = global['ng2-page-transition'] || {}),global.ng.core,global.ng.router));
}(this, (function (exports,_angular_core,_angular_router) { 'use strict';
function defaultPageTransition() {
return fadeOutAndIn();
}
function fadeOutAndIn() {
return _angular_core.trigger('ng2ElementState', [
_angular_core.state('leave', _angular_core.style({
opacity: 0.3,
})),
_angular_core.state('out', _angular_core.style({
opacity: 0,
})),
_angular_core.state('enter', _angular_core.style({
opacity: 1,
})),
_angular_core.transition('* => enter', _angular_core.animate('0.5s ease-in')),
_angular_core.transition('* => leave', _angular_core.animate('0.2s ease-out')),
_angular_core.transition('* => out', _angular_core.animate('0ms'))
]);
}
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __param = (undefined && undefined.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
exports.Ng2PageTransitionComponent = (function () {
function Ng2PageTransitionComponent(router) {
var _this = this;
this.router = router;
this.scrollTop = true;
this.onlyOnRoutes = [""];
this.ignoreOnRoutes = [""];
this.animation = {
state: "leave",
custom: false,
enterDelay: 0
};
this.animation.state = "leave";
router.events.subscribe(function (event) { return _this.routerSubscription(event); });
}
Ng2PageTransitionComponent.prototype.routerSubscription = function (event) {
var _this = this;
if (this.shouldTriggerForRoute(event.url)) {
if (event instanceof _angular_router.NavigationStart) {
this.animation.state = "leave";
this.delayPromise = new Promise(function (resolve, reject) {
window.setTimeout(function () {
resolve(true);
}, _this.animation.enterDelay);
});
}
else if (event instanceof _angular_router.NavigationEnd || event instanceof _angular_router.NavigationCancel) {
if (typeof this.delayPromise !== "undefined") {
this.delayPromise.then(function () {
_this.animation.state = "out";
if (_this.scrollTop) {
window.scrollTo(0, 0);
}
setTimeout(function () {
_this.animation.state = "enter";
}, 0);
});
}
else {
this.animation.state = "out";
if (this.scrollTop) {
window.scrollTo(0, 0);
}
setTimeout(function () {
_this.animation.state = "enter";
}, 0);
}
}
}
};
Ng2PageTransitionComponent.prototype.shouldTriggerForRoute = function (url) {
return this.passesOnlyOnRoutes(url) && this.passesIgnoreOnRoutes(url);
};
Ng2PageTransitionComponent.prototype.passesOnlyOnRoutes = function (url) {
if (!url) {
return false;
}
for (var i = 0; i < this.onlyOnRoutes.length; i++) {
if (url.indexOf(this.onlyOnRoutes[i]) > -1) {
return true;
}
}
return false;
};
Ng2PageTransitionComponent.prototype.passesIgnoreOnRoutes = function (url) {
if (!url) {
return false;
}
var filteredRoutes = this.ignoreOnRoutes.filter(function (route) { return url.indexOf(route) > -1; });
if (filteredRoutes.length && filteredRoutes.length > 0) {
return false;
}
return true;
};
return Ng2PageTransitionComponent;
}());
__decorate([
_angular_core.Input()
], exports.Ng2PageTransitionComponent.prototype, "scrollTop", void 0);
__decorate([
_angular_core.Input()
], exports.Ng2PageTransitionComponent.prototype, "onlyOnRoutes", void 0);
__decorate([
_angular_core.Input()
], exports.Ng2PageTransitionComponent.prototype, "ignoreOnRoutes", void 0);
__decorate([
_angular_core.Input()
], exports.Ng2PageTransitionComponent.prototype, "animation", void 0);
exports.Ng2PageTransitionComponent = __decorate([
_angular_core.Component({
selector: 'ng2-page-transition',
template: '<div [@ng2ElementState]="animation.custom || animation.state"><ng-content></ng-content></div>',
animations: [defaultPageTransition()],
}),
__param(0, _angular_core.Inject(_angular_core.forwardRef(function () { return _angular_router.Router; })))
], exports.Ng2PageTransitionComponent);
var __decorate$1 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
exports.Ng2PageTransitionModule = (function () {
function Ng2PageTransitionModule() {
}
return Ng2PageTransitionModule;
}());
exports.Ng2PageTransitionModule = __decorate$1([
_angular_core.NgModule({
declarations: [exports.Ng2PageTransitionComponent],
exports: [exports.Ng2PageTransitionComponent]
})
], exports.Ng2PageTransitionModule);
exports.defaultPageTransition = defaultPageTransition;
exports.fadeOutAndIn = fadeOutAndIn;
Object.defineProperty(exports, '__esModule', { value: true });
})));