NG-GX-SPLIT-TEXT - This is an Angular utility to split text into words, lines or chars for subsequent animations.
You can familiarize yourself with the demo version here - DEMO
Angular | ng-gx-split-text |
---|---|
>=8.0.0 <9.0.0 | v0.0.x |
- Split into chars
- Split into words
- Split into line-chars
- Split into line-words
- Defer init
Step 1: Install ng-gx-split-text
(npm):
npm install ng-gx-split-text
import { NgGxSplitTextModule } from 'ng-gx-split-text';
@NgModule({
declarations: [
AppComponent,
],
imports: [
NgGxSplitTextModule,
],
bootstrap: [AppComponent]
})
export class AppModule {}
Step 3: Add directive to HTML node you want to split and template ID to reference this Directive in Component (example: #text):
<p #text ngGxSplitText>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus amet consequuntur culpa
delectus, doloribus exercitationem ipsam, laudantium molestiae non numquam odit omnis optio praesentium quae ratione
similique sit soluta voluptatem?</p>
@ViewChild('text', { static: true, read: NgGxSplitTextDirective }) text: NgGxSplitTextDirective;
Step 5: Work with split text using @ViewChild (Example for GSAP):
export class AppComponent implements AfterViewInit {
@ViewChild('text', {static: true, read: NgGxSplitTextDirective}) text: NgGxSplitTextDirective;
tlText = new TimelineMax();
constructor() {}
ngAfterViewInit(): void {
this.textAnimation();
}
textAnimation() {
this.tlText
.to(this.text.words, 0.5, {
opacity: 0,
})
.staggerFromTo(this.text.words, 0.5, {
opacity: 0,
x: () => {
return _.random(-100, 100);
},
y: () => {
return _.random(-100, 100);
},
rotation: () => {
return _.random(-25, 25);
},
immediateRender: false,
}, {
opacity: 1,
x: 0,
y: 0,
rotation: 0,
}, 0.03);
}
}
#DEMO
Name | Description |
---|---|
NgGxSplitText | Split your text (all options is default) |
[splitOptions] | Split your text (custom options ) |
Name | Type | Default | Description |
---|---|---|---|
defer | boolean |
false |
Defer initiation (for manual initiation use initSplit() ) |
mask | boolean |
false |
Add mask/wrap (overflow: hidden) for words |
onlyWords | boolean |
false |
Split only words without chars |
<p #text ngGxSplitText>Lorem ipsum dolor...</p> // Default options
<p #text ngGxSplitText [splitOptions]="{defer: true, ...}">Lorem ipsum dolor...</p> // Custom options
Name | Type | Description |
---|---|---|
isInit | boolean |
Is Split Text applied |
nativeElement | HTMLElement |
Container HTMLElement |
words | HTMLElement[] |
Words HTMLElement array |
chars | HTMLElement[] |
Chars HTMLElement array |
line-words | HTMLElement[][] |
Line array with words HTMLElement array |
line-chars | HTMLElement[][] |
Line array with chars HTMLElement array |
this.text.isInit // console.log(true);
this.text.srcText // console.log(Lorem ipsum dolor...);
Name | Description |
---|---|
initSplit() | Initialize Split Text (For using in case defer: true ) |
resetSplit() | Reset to source text |
ngAfterViewInit(): void {
// if Split Text already initialized (defer: false)
this.text.initSplit(); // Return WARNING! Text already initialized
// if Split Text not initialized (defer: true)
this.text.initSplit(); // It's OK!
}