Fak*_*ire 6 typescript angular angular-animations
我想在单击时同时触发两个动画。动画触发器使用相同的状态,一个放置在外部父 div 上,另一个嵌套在该 div 内。样式已更改,但过渡仅应用于父组件。我在我的父动画中使用了 animateChild 但没有成功。如何在父元素和子元素上应用动画?
动画.ts
import {
trigger,
state,
style,
transition,
animate,
query,
group,
animateChild,
} from "@angular/animations";
export const Animations = {
animations: [
trigger("expansionTrigger", [
state(
"true",
style({
height: "*"
})
),
state(
"false",
style({
height: "0",
display: "none"
})
),
transition("false <=> true", [
group([
query("@colExpansion", [animateChild()]),
animate("3s ease")
])
])
]),
trigger("colExpansion", [
state(
"true",
style({
"-webkit-box-flex": "0",
flex: "0 0 66.66667%",
"max-width": "66.66667%"
})
),
state(
"false",
style({
"flex-basis": "0",
"-webkit-box-flex": "1",
"flex-grow": "1",
"max-width": "100%"
})
),
transition("false <=> true", animate(3))
])
]
};
Run Code Online (Sandbox Code Playgroud)
主体组件.ts
import { Component, Input } from '@angular/core';
import { Animations } from '../animations';
@Component({
selector: 'app-body',
templateUrl: './body.component.html',
styleUrls: ['./body.component.css'],
animations: Animations.animations
})
export class BodyComponent {
@Input() isExpanded: string;
}
Run Code Online (Sandbox Code Playgroud)
body.component.html
<div [@expansionTrigger]="isExpanded === 'true' ? 'true' : 'false'">
<div [@colExpansion]="isExpanded === 'true' ? 'true' : 'false'">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我做了一个工作演示。我做了自己的样式,因为我不明白这个组件的用途。您可以轻松地将其调整为您的风格...
动画.ts
import {
trigger,
state,
style,
transition,
animate,
query,
group,
animateChild,
keyframes,
} from "@angular/animations";
//
// Global Animate Time
const animateTime0 = "1s ease"
const animateTime1 = "3s"
const animateTime2 = "200ms ease-in-out"
//
// Global Animations
const fade0 = animate(animateTime2, keyframes([
style({ opacity: 0 }),
style({ opacity: 1 })
]))
//
// Styles
// Expansion Trigger
const expansionTriggerOnStyle = {
height: "*",
display: "*"
}
const expansionTriggerOffStyle = {
height: "0",
display: "none"
}
// Col.
const colExpansionOnStyle = {
width: "66.66667%"
}
const colExpansionOffStyle = {
width: "100%"
}
//
// Animations
// Expansion Trigger
function expansionTriggerAni(start, end) {
return group([
animate(animateTime0, keyframes([
style(start),
style(end)
])),
query("@colExpansion", group([
animateChild(),
fade0
]))
])
}
//
// *Exported* Triggers
export const expansionTriggerAnimation = trigger("expansionTrigger", [
//
// States
state("on", style(expansionTriggerOnStyle)),
state("off", style(expansionTriggerOffStyle)),
//
// Transitions
transition(
"on => off",
expansionTriggerAni(expansionTriggerOnStyle, expansionTriggerOffStyle)
),
transition(
"off => on",
expansionTriggerAni(expansionTriggerOffStyle, expansionTriggerOnStyle)
)
])
export const colExpansionAnimation = trigger("colExpansion", [
//
// States
state("on", style(colExpansionOnStyle)),
state("off", style(colExpansionOffStyle)),
//
// Transitions
transition("on <=> off", animate(animateTime1))
])
Run Code Online (Sandbox Code Playgroud)
主体组件.ts
import { Component, OnInit } from '@angular/core';
import { expansionTriggerAnimation, colExpansionAnimation } from './animations';
@Component({
selector: 'body',
templateUrl: './body.component.html',
styleUrls: ['./body.component.scss'],
animations: [
expansionTriggerAnimation,
colExpansionAnimation
]
})
export class BodyComponent implements OnInit {
isExpanded: boolean
status: string = 'off'
constructor() { }
ngOnInit() {
}
toggle() {
this.isExpanded = !this.isExpanded
this.status = !this.isExpanded ? 'off' : 'on'
console.log("Status:", this.status)
}
}
Run Code Online (Sandbox Code Playgroud)
主体.组件.scss
.wrapper {
width: 200px;
height: 50px;
background-color: gray;
cursor: pointer;
overflow: hidden;
.col {
width: 100%;
background-color: beige;
}
}
Run Code Online (Sandbox Code Playgroud)
body.component.html
<button (click)="toggle()">Toggle expansion</button>
<div class="wrapper" [@expansionTrigger]="status">
<div class="col" [@colExpansion]="status">
I am col
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6344 次 |
| 最近记录: |