angularjs цепочечный переход / постепенное исчезновение

Я посмотрел на официальный пример перехода / показать / скрыть в нижней части этой страницы... http://docs.angularjs.org/api/ng.directive:ngShow

Я попытался изменить его, чтобы получить безобидный переход с постепенным исчезновением (переход: непрозрачность 0,5 с замедлением) из одного элемента div в другой, где оба элемента div занимают одну и ту же позицию на странице, так что один элемент div полностью исчезает до того, как другой div начинает исчезать.

В jquery это было бы так просто:

$("#divA").fadeOut(function() { $("divB").fadeIn(); });

Есть ли у кого-нибудь какие-либо советы о том, как лучше всего добиться этого с помощью angular, в отношении связанного примера, в котором для запуска перехода используется одна "проверенная" модель?

3 ответа

Я использовал пример в 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']);

Я надеюсь, что это поможет вам;)

Используя модуль 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;
}

Вы можете использовать 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>
Другие вопросы по тегам