Как создать эффект слайда с Angular?

У меня есть следующий HTML:

<div>
    <div data-ng-click="showContent()" data-ng-show="!visible" class="fly-in-group">{{heading}}</div>

    <div data-ng-show="visible" class="fly-in-group">
        <div data-ng-click="showHeadings()">Terug naar jaaroverzicht</div>
        <div data-ng-transclude></div>
    </div>
</div>

и CSS:

.fly-in-group{
   -webkit-transition:all 2s linear 0s;
    transition:all 2s linear 0s;

    position: relative;
    left: 0;
    line-height:15px;
    opacity:1;
    padding:10px;
}

.fly-in-group.ng-hide-add, 
.fly-in-group.ng-hide-remove{

    display: block !important;
}

.fly-in-group.ng-hide-add{
    position: relative;
    right: -9999px;
}

.fly-in-group.ng-hide-remove{
    position: relative;
    left: -9999px;
}

А вот и скрипка

Что я пытаюсь сделать, так это то, что при нажатии "Некоторая подпись" этот div "выдвигается" влево, а другой div (с элементами) "скользит" справа.

Я хочу сделать это, используя Angular + CSS3, но я просто не могу понять это. Может ли кто-нибудь помочь мне и объяснить, как это работает?

2 ответа

Переходы CSS3 зависят от конкретных атрибутов.

Когда элемент скрыт с помощью ngHide, к нему добавляется класс 'ng-hide'. Таким образом, если мы хотим, чтобы вещи скользили внутрь и наружу, нам нужно перезаписать.ng-hide, чтобы он изменил интересующий нас атрибут. Критическим моментом является то, что мы также должны переопределить значение по умолчанию.ng-hide. display: none, который иначе разрушает переход.

В этом случае нет необходимости настраивать промежуточные классы.ng-hide-add и.ng-hide-remove.

Чтобы решить вопрос с минимально необходимыми изменениями, измените CSS на этот ( возьмите здесь):

.fly-in-group{
    -webkit-transition:all 0.5s linear 0s;
    transition:all 0.5s linear 0s;

    position: absolute;
    left: 0;
    line-height:15px;
    opacity:1;
    padding:10px;
}

.fly-in-group.ng-hide {
    display: block !important;
    position: absolute;
    left: -999px;
}

Единственное предостережение: я изменил положение.fly-in-group на абсолютное. Я сделал это, чтобы предотвратить раздражающее мерцание во время перехода.

Я бы посоветовал использовать преобразования CSS3, а не использовать "левый". Я также обновил угловую версию.

Вот скрипка:

http://jsfiddle.net/fernandopasik/GcUjL/

.fly-in-group {
    -webkit-transition:all 0.2s linear 0s;
    -moz-transition:all 0.2s linear 0s;
    -o-transition:all 0.2s linear 0s;
    -ms-transition:all 0.2s linear 0s;
    transition:all 0.2s linear 0s;
    position: absolute;
    left: 0;
    cursor: pointer;
    line-height:15px;
    opacity:1;
    padding:10px;
    -webkit-transform: translate3d(0, 0, 0);
    -moz-transform: translate3d(0, 0, 0);
    -o-transform: translate3d(0, 0, 0);
    -ms-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
}
.fly-in-group.ng-hide {
    display: block !important;
    -webkit-transform: translate3d(-100%, 0, 0);
    -moz-transform: translate3d(-100%, 0, 0);
    -o-transform: translate3d(-100%, 0, 0);
    -ms-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
}
Другие вопросы по тегам