Search Lessons, Code Snippets, and Videos
search by algolia
X
#native_cta# #native_desc# Sponsored by #native_company#

Animate a Component Based on Scroll Position Angular 4.2

written by Jeff Delaney
full courses and content on fireship.io

Update! Watch the latest video and get the most up-to-date code by watching videos tagged with animation on Fireship.io

This snippet uses HostListener keep track of the scroll position of a component and animates it in and out the view based on its position in the browser window.

div being animated into the screen when it reaches a visible scroll position in Angular

Gist

<div class="box" [@scrollAnimation]="state">
<img src="https://images.pexels.com/photos/37547/suit-business-man-business-man-37547.jpeg?w=1260&h=750&auto=compress&cs=tinysrgb">
</div>
import { Component, HostListener, ElementRef } from '@angular/core';
import {
trigger,
state,
style,
animate,
transition
} from '@angular/animations';
@Component({
selector: 'content-box',
templateUrl: './content-box.component.html',
styleUrls: ['./content-box.component.scss'],
animations: [
trigger('scrollAnimation', [
state('show', style({
opacity: 1,
transform: "translateX(0)"
})),
state('hide', style({
opacity: 0,
transform: "translateX(-100%)"
})),
transition('show => hide', animate('700ms ease-out')),
transition('hide => show', animate('700ms ease-in'))
])
]
})
export class ContentBoxComponent {
state = 'hide'
constructor(public el: ElementRef) { }
@HostListener('window:scroll', ['$event'])
checkScroll() {
const componentPosition = this.el.nativeElement.offsetTop
const scrollPosition = window.pageYOffset
if (scrollPosition >= componentPosition) {
this.state = 'show'
} else {
this.state = 'hide'
}
}
}
<div>
A whole bunch of text......
</div>
<content-box></content-box>