2015-11-03 3 views
0

Я пытаюсь сделать мой div2 похожим на кнопку SlideUp-Click to Toggle here.div не отображается во время анимации с использованием nganimate

My code показывает, что он не работает. Кнопки «открыть второй div» и «скрыть этот div» предназначены для отображения/скрытия второго div. Функция show/hide работает, но анимация не работает. Пожалуйста помоги.

var myElement = angular.element(document.querySelector('#div2')); 
    myElement.addClass('ng-hide'); 

    $scope.openSecondDiv = function() { 
     var myElement = angular.element(document.querySelector('#div2')); 
     myElement.removeClass('ng-hide'); 
    } 
    $scope.hideSecondDiv = function() { 
     var myElement = angular.element(document.querySelector('#div2')); 
     myElement.addClass('ng-hide'); 
    } 

ответ

1

Вместо того, чтобы все логики контроллера, что об использовании нг-шоу непосредственно в качестве атрибута:

<div class="row teal" id="div1"> 
    <button class="btn" ng-click="showDiv2 = !showDiv2">Open second div</button> 
</div> 

<div style="background: orange;" class="row cssSlideUp" ng-show='showDiv2'> 
    <button class="btn" ng-click="showDiv2 = false">Hide this div</button> 
</div> 

Для нг щелчков, первый пример переключая и других сил него к ложному.

+0

Помогите мне выяснить, почему мой код не работает? Я тоже хочу это понять. – TkNeo

0

Вам не нужно делать такой комплекс для этого. Я реализовал простой css-переход и ng-класс.

Вы можете проверить this plunker

Моей css реализации:

div { 
    white-space: pre; 
    background: #eee; 
    color: #333; 
    overflow:hidden; 
    height:0; 
    opacity:0; 
    transition:height 1s, opacity 1s; 
    -moz-transition:height 1s opacity 1s; 
    -webkit-transition:height 1s opacity 1s; 
    -o-transition:height 1s opacity 1s; 
    -ms-transition:height 1s opacity 1s; 
} 
.changed { 
    height:200px; 
    opacity: 1; 
} 

Моей html реализация

<button class="btn" ng-click="hideSecondDiv()">Hide this div</button> 
<div ng-class="{changed:clicked === true}" id="div2"> 

</div> 

Надеется, что это будет работать для вас.

+0

Можете ли вы помочь мне выяснить, почему мой код не работает? Я тоже хочу это понять. Спасибо, что поделились своим плунжером – TkNeo

+0

все, что я хочу сказать, ваш подход не очень хорош, даже если он может достичь того, что вы пытаетесь получить. id на основе dom, добавление/удаление класса с помощью jquery-подхода не является хорошим подходом, и когда вы можете достичь того же самого элемента более чистым и эффективным способом угловым способом. – Rebel

+0

кажется, что никто из нас не знает, почему мой код не работает. Я попытаюсь понять это. – TkNeo

1

Это потому, что вы пытаетесь перейти на height: 0, чего вы не можете сделать.

Изменение height к max-height решает эту проблему с вашим кодом, как видно в обновленном plunkr: http://plnkr.co/edit/O4rT2bSsr3KnufQMYuhx?p=preview

Но, как уже говорили другие, вы не должны делать это таким образом. Вы должны просто переключать классы с помощью Angular, а не .addClass.

+0

большое спасибо. В соответствии с вашими предложениями я изменил код для анимации ng-hide, используя выражения, которые являются более элегантными, чем подход jquery, который я использовал раньше. http://plnkr.co/edit/QY1VQVqHPZZOOi9qyl6f?p=preview Можете ли вы помочь мне понять, почему нам приходилось менять высоту до максимальной высоты. Я пытался google, но не мог понять, – TkNeo

+0

@Tarun. На самом деле я не знаю истинного ответа на этот вопрос, кроме браузера, который не поддерживает переход к высоте 0 или авто. Подумайте, что это имеет какое-то отношение к браузеру, которому нужны фактические значения для вычисления анимации inbetweens. – Shane