Переходный переход с постепенным переходом/постепенным переходом
Я посмотрел официальный пример show/hide в нижней части этой страницы... http://docs.angularjs.org/api/ng.directive:ngShow
Я попытался изменить его, чтобы получить безсмысленный переход затухания (переход: непрозрачность 0.5s-в-out-out) из одного div в другой, где оба divs занимают то же самое положение на странице, так что один div полностью исчезает до того, как другой div начинает исчезать.
В jquery это будет так же просто, как:
$("#divA").fadeOut(function() { $("divB").fadeIn(); });
Есть ли у кого-нибудь какие-либо рекомендации по наилучшему достижению этого с помощью angular, в отношении связанного примера, который использует одну "проверенную" модель для запуска перехода?
Ответы
Ответ 1
Я использовал пример в ngShow, чтобы сделать следующее jsfiddle на основе angular1.2.0-rc.3.
Код html:
<div ng-app="App">
Click me: <input type="checkbox" ng-model="checked"><br/>
<div class="check-element animate-show" ng-show="checked">
<span class="icon-thumbs-up"></span> I show up when your checkbox is checked.
</div>
<div class="check-element animate-show" ng-hide="checked">
<span class="icon-thumbs-down"></span> I hide when your checkbox is checked.
</div>
</div>
Стили CSS
.animate-show.ng-hide-add,
.animate-show.ng-hide-remove {
-webkit-transition:all linear 0.5s;
-moz-transition:all linear 0.5s;
-o-transition:all linear 0.5s;
transition:all linear 0.5s;
display:block!important;
}
.animate-show.ng-hide-add.ng-hide-add-active,
.animate-show.ng-hide-remove {
line-height:0;
opacity:0;
padding:0 10px;
}
.animate-show.ng-hide-add,
.animate-show.ng-hide-remove.ng-hide-remove-active {
line-height:20px;
opacity:1;
padding:10px;
border:1px solid black;
background:white;
}
.check-element {
padding:10px;
border:1px solid black;
background:white;
}
И, наконец, код JavaScript, не забудьте включить библиотеки angular.js
и angular-animate.js
angular.module('App', ['ngAnimate']);
Я надеюсь, что это вам поможет;)
Ответ 2
Используя модуль ngAnimate, вы можете сделать это в чистом CSS с директивой -transition-delay
:
Plunker
HTML
<body ng-app="ngAnimate">
Click me: <input type="checkbox" ng-model="checked">
<br/>
<img ng-show="checked" src="img1.jpg">
<img ng-hide="checked" src="img2.jpg">
</body>
CSS
img {
position: absolute;
}
.ng-hide-add-active {
display: block!important;
-webkit-transition: 0.5s linear all;
transition: 0.5s linear all;
}
.ng-hide-remove-active {
display: block!important;
-webkit-transition: 0.5s linear all;
transition: 0.5s linear all;
-webkit-transition-delay: 0.5s;
transition-delay: 0.5s;
}
.ng-hide {
opacity: 0;
}
Ответ 3
Вы можете использовать ng-animate в сочетании с ng-show (http://docs.angularjs.org/api/ngAnimate), доступный из Angular 1.1.4. Или, альтернативно, просто примените класс show
, когда модель будет отмечена галочкой, и примените ваше шоу и анимацию к классу.
<label><input type="checkbox" ng-model="showElement" />Show div</label>
<div ng-class="{show: showElement}"></div>