All files / src/components/parallax-header parallax-header.ts

28% Statements 7/25
0% Branches 0/2
14.29% Functions 1/7
27.27% Lines 6/22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64                  1x                 1x                           1x       1x                   1x                               1x  
import { Directive, ElementRef, Renderer2 } from '@angular/core';
 
@Directive( {
    host: {
        '(ionScroll)': 'onContentScroll($event)',
        '(window:resize)': 'onWindowResize($event)'
    },
    selector: '[parallax-header]'
} )
export class ParallaxHeader {
 
    private header: any;
    private headerHeight: any;
    private translateAmt: any;
    private scaleAmt: any;
 
    constructor ( public element: ElementRef, public renderer: Renderer2 ) {}
 
    protected ngOnInit () {
 
        const content = this.element.nativeElement.getElementsByClassName( 'scroll-content' )[ 0 ];
        this.header = content.getElementsByClassName( 'header-image' )[0];
        const mainContent = content.getElementsByClassName( 'main-content' )[0];
 
        this.headerHeight = this.header.clientHeight;
 
        // this.renderer.setElementStyle(this.header, 'webkitTransformOrigin', 'center bottom');
        // this.renderer.setElementStyle(this.header, 'background-size', 'cover');
        this.renderer.setStyle( mainContent, 'position', 'absolute' );
 
    }
 
    private onWindowResize ( ev ) {
        this.headerHeight = this.header.clientHeight;
    }
 
    private onContentScroll ( ev ) {
 
        console.log( this.element.nativeElement.getElementsByClassName( 'scroll-content' )[ 0 ].scrollTop );
 
        ev.domWrite( () => {
            this.updateParallaxHeader( ev );
        } );
 
    }
 
    private updateParallaxHeader ( ev ) {
 
        if ( ev.scrollTop >= 0 ) {
            this.translateAmt = ev.scrollTop / 4;
            this.scaleAmt = 1;
        } else {
            this.translateAmt = 0;
            this.scaleAmt = -ev.scrollTop / this.headerHeight + 1;
        }
 
        this.renderer.setStyle(
            this.header,
            'webkitTransform',
            `translate3d(0, ${ this.translateAmt }px, 0) scale(${ this.scaleAmt }, ${ this.scaleAmt })`
        );
    }
}