CSS 转换仅在第一次应用时有效
CSS transitions only work the first time they are applied
作为我正在创建的 AngularJS 应用程序的一部分,我有一个记录列表,分为 3 个部分:
当前选定记录之前的记录列表、当前选定记录以及当前选定记录之后的记录列表。记录列表和当前选定的记录都是从所有记录的单个父列表创建的(记录在所有记录列表中的顺序不会改变)。所以基本的 HTML 结构如下所示:
<div class="card list" ng-repeat="timeRecord in recordsBeforeCurrent">
....
</div>
<div class="card" ng-class="active" id="currentRecordCard">
....
<h2 ng-class="activeTimer" id="currentRecordTimer"></h2>
....
</div>
<div class="card list" ng-repeat="timeRecord in recordsAfterCurrent">
....
</div>
每当当前选定的记录发生变化时,我希望能够将 css 转换应用到 currentRecordCard
元素和 currentRecordTimer
元素。我使用以下 css:
#currentRecordCard {
margin-top: 20px;
margin-bottom: 20px;
transition: margin 1s ease;
}
#currentRecordCard.active {
margin-top: 40px;
margin-bottom: 40px;
}
#currentRecordTimer {
font-size: 20px;
position: absolute;
left: 0;
margin-left: 16px;
transition: all 0.5s ease;
}
#currentRecordTimer.activeTimer {
font-size: 30px;
left: 50%;
margin-left: -57px;
}
每次用户单击 recordsBeforeCurren
t 或 recordsAfterCurrent
列表中的记录时,都会调用一个函数 resumeRecord()
,该函数当前如下所示:
$scope.resumeRecord = function(record){
$scope.active = "";
$scope.activeTimer = "";
***
currentRecord = null;
lists of before and after records are cleared;
currentRecord is set whichever record was just clicked;
lists of before and after records are recalculated;
***
$scope.active = "active";
$scope.activeTimer = "activeTimer";
}
目前,第一次更改 currentRecord
时,转换工作正常,但之后每次更改 currentRecord
时,都没有转换,.active
和 .activeTimer
class 属性始终处于活动状态,所以我不太确定问题出在哪里...
干杯
这样做。在 Plunkr.
中测试
<div class="card list"
ng-class="currentRecord === $index ? 'active' : ''"
ng-click="toggleRecord($index)"
ng-repeat="timeRecord in records">
<h2></h2>
</div>
JavaScript
$scope.toggleRecord = function($index) {
$scope.currentRecord = $index;
}
CSS
.card {
margin-top: 20px;
margin-bottom: 20px;
transition: margin 1s ease;
}
.card.active {
margin-top: 40px;
margin-bottom: 40px;
}
.card h2 {
font-size: 20px;
position: absolute;
left: 0;
margin-left: 16px;
transition: all 0.5s ease;
}
.card.active h2 {
font-size: 30px;
left: 50%;
margin-left: -57px;
}
终于按照我想要的方式运行了。我最终不得不更改控制器中的一些逻辑并为卡片创建我自己的 类(我正在使用 Ionic,所以希望使用它们的 类)以便只有一个列表用于每条记录。非常感谢所有帮助过我的人,特别是 Ruslanas Balčiūnas 和你的 Plunkr,这让我的事情变得容易多了。
作为我正在创建的 AngularJS 应用程序的一部分,我有一个记录列表,分为 3 个部分: 当前选定记录之前的记录列表、当前选定记录以及当前选定记录之后的记录列表。记录列表和当前选定的记录都是从所有记录的单个父列表创建的(记录在所有记录列表中的顺序不会改变)。所以基本的 HTML 结构如下所示:
<div class="card list" ng-repeat="timeRecord in recordsBeforeCurrent">
....
</div>
<div class="card" ng-class="active" id="currentRecordCard">
....
<h2 ng-class="activeTimer" id="currentRecordTimer"></h2>
....
</div>
<div class="card list" ng-repeat="timeRecord in recordsAfterCurrent">
....
</div>
每当当前选定的记录发生变化时,我希望能够将 css 转换应用到 currentRecordCard
元素和 currentRecordTimer
元素。我使用以下 css:
#currentRecordCard {
margin-top: 20px;
margin-bottom: 20px;
transition: margin 1s ease;
}
#currentRecordCard.active {
margin-top: 40px;
margin-bottom: 40px;
}
#currentRecordTimer {
font-size: 20px;
position: absolute;
left: 0;
margin-left: 16px;
transition: all 0.5s ease;
}
#currentRecordTimer.activeTimer {
font-size: 30px;
left: 50%;
margin-left: -57px;
}
每次用户单击 recordsBeforeCurren
t 或 recordsAfterCurrent
列表中的记录时,都会调用一个函数 resumeRecord()
,该函数当前如下所示:
$scope.resumeRecord = function(record){
$scope.active = "";
$scope.activeTimer = "";
***
currentRecord = null;
lists of before and after records are cleared;
currentRecord is set whichever record was just clicked;
lists of before and after records are recalculated;
***
$scope.active = "active";
$scope.activeTimer = "activeTimer";
}
目前,第一次更改 currentRecord
时,转换工作正常,但之后每次更改 currentRecord
时,都没有转换,.active
和 .activeTimer
class 属性始终处于活动状态,所以我不太确定问题出在哪里...
干杯
这样做。在 Plunkr.
中测试<div class="card list"
ng-class="currentRecord === $index ? 'active' : ''"
ng-click="toggleRecord($index)"
ng-repeat="timeRecord in records">
<h2></h2>
</div>
JavaScript
$scope.toggleRecord = function($index) {
$scope.currentRecord = $index;
}
CSS
.card {
margin-top: 20px;
margin-bottom: 20px;
transition: margin 1s ease;
}
.card.active {
margin-top: 40px;
margin-bottom: 40px;
}
.card h2 {
font-size: 20px;
position: absolute;
left: 0;
margin-left: 16px;
transition: all 0.5s ease;
}
.card.active h2 {
font-size: 30px;
left: 50%;
margin-left: -57px;
}
终于按照我想要的方式运行了。我最终不得不更改控制器中的一些逻辑并为卡片创建我自己的 类(我正在使用 Ionic,所以希望使用它们的 类)以便只有一个列表用于每条记录。非常感谢所有帮助过我的人,特别是 Ruslanas Balčiūnas 和你的 Plunkr,这让我的事情变得容易多了。