gpt4 book ai didi

javascript - 动画 ngIf 时元素重叠

转载 作者:行者123 更新时间:2023-11-30 11:18:53 25 4
gpt4 key购买 nike

我正在尝试在使用 *ngIf 切换时为 div 设置动画。

我假设我遇到的问题是动画中一个众所周知的延迟/计时问题,但我想不出一个合法的解决方案。

1) 当现有元素开始他的离开动画时,他仍然在 DOM 中。

2) 进入元素在这段时间内开始他的动画。

3) 问题 是当第一个元素完成动画并从 DOM 中移除时,第二个元素已经可见,因此造成了 UI 故障

下面的代码不是我的,但它证明了我的问题。

有人能指出我正确的方向吗?

angular.module('app', ['ngAnimate']).
controller('ctrl', function(){});
.fade-element-in.ng-enter {
transition: 0.8s linear all;
opacity: 0;
}

.fade-element-in-init .fade-element-in.ng-enter {
opacity: 1;
}

.fade-element-in.ng-enter.ng-enter-active {
opacity: 1;
}

.fade-element-in.ng-leave {
transition: 0.3s linear all;
opacity: 1;
}
.fade-element-in.ng-leave.ng-leave-active {
opacity: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-animate.min.js"></script>

<div ng-app="app" ng-controller="ctrl">
<a href="" ng-click="showMe = !showMe">Click me</a>
<div class="fade-element-in" ng-if="showMe">
SomeContent
</div>
<div class="fade-element-in" ng-if="!showMe">
SomeOtherContent
</div>
</div>

最佳答案

如果您打算一次拥有一个元素,您可以将其设置为 position: absolute这样他们就不会影响彼此的定位

我们可以通过添加ng-class来添加动画更进一步

angular.module('app', ['ngAnimate']).
controller('ctrl', function() {});
.fade-element-in.ng-enter {
transition: 0.8s linear all;
opacity: 0;
}

.fade-element-in-init .fade-element-in.ng-enter {
opacity: 1;
}

.fade-element-in.ng-enter.ng-enter-active {
opacity: 1;
}

.fade-element-in.ng-leave {
transition: 0.5s linear all;
opacity: 1;
}

.fade-element-in.ng-leave.ng-leave-active {
opacity: 0;
}

.container {
position: absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-animate.min.js"></script>

<div ng-app="app" ng-controller="ctrl">
<a href="" ng-click="showMe = !showMe">Click me</a>
<div class="container">
<div ng-class="{'fade-element-in': showMe}" ng-if="showMe">
SomeContent
</div>
</div>
<div class="container">
<div ng-class="{'fade-element-in': !showMe}" ng-if="!showMe">
SomeOtherContent
</div>
</div>
</div>

关于javascript - 动画 ngIf 时元素重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50555159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com