ngx-flip-card
Version:
Angular component to animate a double-sided card.
1 lines • 21.8 kB
Source Map (JSON)
{"version":3,"file":"ngx-flip-card.mjs","sources":["../../../projects/ngx-flip-card/src/lib/ngx-flip-card/ngx-flip-card.component.ts","../../../projects/ngx-flip-card/src/lib/ngx-flip-card/ngx-flip-card.component.html","../../../projects/ngx-flip-card/src/lib/ngx-tilt-card/ngx-tilt-card.component.ts","../../../projects/ngx-flip-card/src/lib/ngx-tilt-card/ngx-tilt-card.component.html","../../../projects/ngx-flip-card/src/lib/ngx-flip-card.module.ts","../../../projects/ngx-flip-card/src/ngx-flip-card.ts"],"sourcesContent":["import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'ngx-flip-card',\n templateUrl: './ngx-flip-card.component.html',\n styleUrls: ['./ngx-flip-card.component.css']\n})\nexport class NgxFlipCardComponent implements OnInit, AfterViewInit {\n\n private _isBackSide: boolean = false;\n @Input()\n set isBackSide(value: boolean) {\n if(value === this._isBackSide){\n return;\n }\n\n this._isBackSide = value;\n this.isBackSideChange.emit(this._isBackSide);\n this.flipInternal();\n }\n\n get isBackSide(): boolean {\n return this._isBackSide;\n }\n\n @Output() isBackSideChange = new EventEmitter<boolean>();\n\n @Input() animate: boolean = true;\n\n @Input() animationDuration: number = 2500;\n\n @Output() animationEnd = new EventEmitter<boolean>();\n\n private canAnimate: boolean = false;\n\n frontRotation: number = 0;\n backRotation: number = 180;\n\n private desiredFrontRotation: number = 0;\n\n frontZindex: number = 1;\n backZindex: number = 0;\n\n @Input() translationZ: number = 2;\n currentTranslationZ: number = 0;\n\n @Input() easing: FlipCardEase = 'linear';\n\n @Input() direction: FlipCardDirection = 'horizontal';\n\n @Input() flipOnClick: boolean = true;\n\n private timeLastFrame: number = Date.now();\n private currentAnimationTime: number = 0;\n private animationFrameRef: number | undefined;\n private animating: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n this.canAnimate = true;\n }\n\n private flipInternal(){\n this.rotateAction();\n }\n\n clickHandler() {\n if(this.flipOnClick){\n this.flipCard();\n }\n }\n\n flipCard() {\n this.isBackSide = !this._isBackSide;\n }\n\n private rotateAction(){\n if(!this.animate || !this.canAnimate){\n this.rotateFlat();\n } else {\n this.animateRotationStart();\n }\n }\n\n private rotateFlat(){\n if(this.isBackSide){\n this.frontRotation = 180;\n this.backRotation = 0;\n this.frontZindex = 0;\n this.backZindex = 1;\n } else {\n this.frontRotation = 0;\n this.backRotation = 180;\n this.frontZindex = 1;\n this.backZindex = 0;\n }\n }\n\n private animateRotationStart(){\n this.desiredFrontRotation = this.isBackSide ? 180 : 0;\n this.timeLastFrame = Date.now();\n\n if(this.animating){\n this.currentAnimationTime = this.calculateReverseEasing();\n } else {\n this.currentAnimationTime = 0;\n }\n\n if(this.animationFrameRef){\n cancelAnimationFrame(this.animationFrameRef);\n }\n this.animationFrameRef = requestAnimationFrame(this.animateLoop.bind(this));\n this.animating = true;\n this.currentTranslationZ = this.translationZ;\n }\n\n private animateLoop(){\n const time = Date.now();\n const deltatime = time - this.timeLastFrame;\n this.timeLastFrame = time;\n this.currentAnimationTime += deltatime;\n const amount = this.currentAnimationTime / this.animationDuration;\n\n switch(this.easing){\n case 'linear':\n this.frontRotation = this.isBackSide ?\n Math.min(this.lerp(0, this.desiredFrontRotation, amount), this.desiredFrontRotation) :\n Math.max(this.lerp(180, this.desiredFrontRotation, amount), this.desiredFrontRotation);\n break;\n case 'easeIn':\n this.frontRotation = this.isBackSide ?\n Math.min(this.easeIn(0, this.desiredFrontRotation, amount), this.desiredFrontRotation) :\n Math.max(this.easeIn(180, this.desiredFrontRotation, amount), this.desiredFrontRotation);\n break;\n case 'easeOut':\n this.frontRotation = this.isBackSide ?\n Math.min(this.easeOut(0, this.desiredFrontRotation, amount), this.desiredFrontRotation) :\n Math.max(this.easeOut(180, this.desiredFrontRotation, amount), this.desiredFrontRotation);\n break;\n case 'easeInOut':\n this.frontRotation = this.isBackSide ?\n Math.min(this.easeInOut(0, this.desiredFrontRotation, amount), this.desiredFrontRotation) :\n Math.max(this.easeInOut(180, this.desiredFrontRotation, amount), this.desiredFrontRotation);\n break;\n }\n\n if(this.currentAnimationTime >= this.animationDuration){\n this.frontRotation = this.desiredFrontRotation;\n }\n\n this.backRotation = this.frontRotation + 180;\n\n if(this.isBackSide && this.frontRotation >= 90){\n this.frontZindex = 0;\n this.backZindex = 1;\n } else if(!this.isBackSide && this.frontRotation <= 90) {\n this.frontZindex = 1;\n this.backZindex = 0;\n }\n\n if(this.frontRotation === this.desiredFrontRotation){\n this.animationEnded();\n return;\n }\n\n this.animationFrameRef = requestAnimationFrame(this.animateLoop.bind(this));\n }\n\n private lerp(a: number, b: number, n: number) {\n return (1 - n) * a + n * b;\n }\n\n private easeIn(a: number, b: number, n: number): number {\n return this.lerp(a, b, n * n);\n }\n\n private easeOut(a: number, b: number, n: number): number {\n return this.lerp(a, b, 1 - (1 - n) * (1 - n));\n }\n\n private easeInOut(a: number, b: number, n: number): number {\n return this.lerp(a, b, n < 0.5 ? 2 * n * n : 1 - Math.pow(-2 * n + 2, 2) / 2);\n }\n\n private calculateReverseEasing(): number{\n if(this.easing === 'linear'){\n return this.animationDuration - this.currentAnimationTime;\n }\n\n const start = this._isBackSide ? 0 : 180;\n const end = this._isBackSide ? 180 : 0;\n\n // increment 16 milliseconds to simulate animation at 60FPS\n for(let i = 0; i < this.animationDuration; i += 16){\n let inverseValue = 0;\n switch(this.easing){\n case 'easeIn':\n inverseValue = this.easeIn(start, end, i / this.animationDuration);\n break;\n case 'easeOut':\n inverseValue = this.easeOut(start, end, i / this.animationDuration);\n break;\n case 'easeInOut':\n inverseValue = this.easeInOut(start, end, i / this.animationDuration);\n break;\n }\n\n if((this._isBackSide && inverseValue >= this.frontRotation) ||\n (!this._isBackSide && inverseValue <= this.frontRotation)){\n return i;\n }\n }\n\n return 0;\n }\n\n private animationEnded(){\n this.animationEnd.emit(this.isBackSide);\n this.animating = false;\n this.currentTranslationZ = 0;\n }\n\n}\n\nexport type FlipCardEase = 'linear' | 'easeIn' | 'easeOut' | 'easeInOut';\n\nexport type FlipCardDirection = 'horizontal' | 'vertical';\n","<div class=\"card-container\" (click)=\"clickHandler()\">\n <div class=\"card-side\"\n [ngStyle]=\"{ 'transform': (direction === 'horizontal' ? 'rotateY(' + frontRotation + 'deg)' : 'rotateX(' + frontRotation + 'deg)') + ' translateZ(' + currentTranslationZ + 'px )', 'z-index': frontZindex }\">\n <ng-content select=\"[card-front]\"></ng-content>\n </div>\n <div class=\"card-side\" \n [ngStyle]=\"{ 'transform': (direction === 'horizontal' ? 'rotateY(' + backRotation + 'deg)' : 'rotateX(' + backRotation + 'deg)') + ' translateZ(' + currentTranslationZ + 'px )', 'z-index': backZindex }\">\n <ng-content select=\"[card-back]\"></ng-content>\n </div>\n</div>\n","import { Component, ElementRef, HostListener, Input, OnInit, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'ngx-tilt-card',\n templateUrl: './ngx-tilt-card.component.html',\n styleUrls: ['./ngx-tilt-card.component.css']\n})\nexport class NgxTiltCardComponent implements OnInit {\n\n @HostListener('mouseout') onMouseOut() {\n this.xRot = 0;\n this.yRot = 0;\n }\n\n @HostListener('mousemove', ['$event']) onMouseMove(event: MouseEvent) {\n let index = event.offsetY / this.tiltContentRef.nativeElement.offsetHeight;\n index = Math.floor(index * 5);\n index = index > this.xRotationMatrix.length -1 ? this.xRotationMatrix.length - 1 : index;\n if(index < this.xRotationMatrix.length && this.xRot !== this.xRotationMatrix[index]){\n this.xRot = this.xRotationMatrix[index];\n } else if(index >= this.xRotationMatrix.length){\n this.xRot = 0;\n this.yRot = 0;\n return;\n }\n\n index = event.offsetX / this.tiltContentRef.nativeElement.offsetWidth;\n index = Math.floor(index * 5);\n if(index < this.yRotationMatrix.length && this.yRot !== this.yRotationMatrix[index]){\n this.yRot = this.yRotationMatrix[index];\n } else if(index >= this.yRotationMatrix.length){\n this.xRot = 0;\n this.yRot = 0;\n }\n }\n\n @ViewChild('tilt') tiltContentRef!: ElementRef;\n\n xRot: number = 0;\n yRot: number = 0;\n\n @Input() rotationDegreesX: number = 5;\n @Input() rotationDegreesY: number = 5;\n\n private xRotationMatrix: number[] = [];\n private yRotationMatrix: number[] = [];\n\n constructor() { }\n\n ngOnInit(): void {\n this.xRotationMatrix = [\n this.rotationDegreesX,\n this.rotationDegreesX / 2,\n 0,\n (this.rotationDegreesX * -1) / 2,\n this.rotationDegreesX * -1\n ];\n\n this.yRotationMatrix = [\n this.rotationDegreesY * -1,\n (this.rotationDegreesY * -1) / 2,\n 0,\n this.rotationDegreesY / 2,\n this.rotationDegreesY\n ];\n }\n}\n","<div class=\"tilt-container\">\n <div #tilt class=\"tilt-content\" [ngStyle]=\"{'transform': 'rotateX(' + xRot + 'deg) rotateY(' + yRot + 'deg)'}\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxFlipCardComponent } from './ngx-flip-card/ngx-flip-card.component';\nimport { NgxTiltCardComponent } from './ngx-tilt-card/ngx-tilt-card.component';\n\n\n\n@NgModule({\n declarations: [\n NgxFlipCardComponent,\n NgxTiltCardComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n NgxFlipCardComponent,\n NgxTiltCardComponent\n ]\n})\nexport class NgxFlipCardModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}