2016-12-05 4 views
0

w3schools 튜토리얼에서 ng-animate는 특정 이벤트를 자동으로 인식하고 ng-show (http://www.w3schools.com/angular/angular_animations.asp)와 같은 애니메이션을 애니메이션에 추가하는 것으로 알고 있다고 생각했습니다.AngularJS ng-show 자동 애니메이션?

왜 ng-show가있는 내 div가 애니메이션으로 나타나지 않는지 궁금합니다.

CSS 코드 I가 사용하고 포함한 HTML :

<html ng-app="myApp"> 
<head> 
<title> AngularJS Tabs</title> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.js"></script> 
<script src="tab2.js"></script> 
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> 
<style> 
    p { 
     font-size: 22px; 
     font-weight: bold; 
     font-style: italic; 
     color: rgb(62, 62, 62); 
     background-color: rgb(6, 179, 6); 
     margin: 18px; 
    } 

    ul { 
     float: left; 
     border-radius: 5px; 
     border: solid 1px rgb(198, 198, 198); 
     padding: 7px 11px; 
     background-color: rgb(248, 248, 248); 
    } 

    li { 
     float: left; 
     background-color: rgb(200, 200, 200); 
     padding: 5px 19px; 
     margin: 5px 2px 5px 0px; 
     color: black; 
     list-style: none; 
    } 

    li:hover, 
    li:hover a { 
     background-color: rgb(6, 179, 6); 
     color: white; 
    } 

    li a { 
     text-decoration: none; 
     color: white; 
     font-size: 21px; 
     font-style: italic; 
     text-shadow: 1px 0px 3px rgb(157, 157, 157); 
    } 

    li:nth-child(1) { 
     border-radius: 4px 0px 0px 4px; 
     margin-left: 1px; 
    } 

    li:nth-child(3) { 
     border-radius: 0px 4px 4px 0px; 
    } 

    .active { 
     background-color: rgb(6, 179, 6); 
    } 
</style> 
</head> 

<body> 
<section class="tab" ng-controller="TabController as panel"> 
    <ul> 
     <li ng-class="{active:panel.isSelected(1) }"> 
      <a href ng-click="panel.selectTab(1)">Description</a> 
     </li> 
     <li ng-class="{active:panel.isSelected(2) }"> 
      <a href ng-click="panel.selectTab(2)">Specifications</a> 
     </li> 
     <li ng-class="{active:panel.isSelected(3)}"> 
      <a href ng-click="panel.selectTab(3)">Reviews</a> 
     </li> 
    </ul> 
    <br /><br /><br /><br /> 

    <div ng-show="panel.isSelected(1)"> 
     <p class="longDescription"> 1</p> 
    </div> 
    <div ng-show="panel.isSelected(2)"> 
     <p class="longDescription"> 2</p> 
    </div> 
    <div ng-show="panel.isSelected(3)"> 
     <p class="longDescription"> 3</p> 
    </div><br /> 

</section> 
</body> 
</html> 

제어기와 tab2.js 파일 : VAR의 GuitarControllers = angular.module ("을 myApp"[ 'ngAnimate']); GuitarControllers.controller ('TabController', 기능() { this.tab = 1;

this.selectTab = function (setTab){ 
    this.tab = setTab; 
}; 
this.isSelected = function(checkTab) { 
    return this.tab === checkTab; 
}; 
}); 

나는 또한 CSS에서 애니메이션을 추가하는 시도,하지만 여전히 작동하지 않습니다

@keyframes myChange { 
    from { 
     width: 0; 
    } to { 
     width: 100%; 
    } 
    } 

    div.ng-show { 
    animation: 1s myChange; 
    } 

탭을 변경할 때 탭 콘텐트에서 일종의 슬라이딩 효과를 찾고 있습니다 (새로운 콘텐트 슬라이드가 있음). 다른 제안도 환영합니다. 감사합니다.

답변

1

내가 볼 수있는 것에서는 올바른 클래스를 선택하십시오. 애니메이션이 작동하는 방식은 나는 그들이 과정을 밟을 때 요소에 클래스를 추가한다는 것을 알고 있다고 확신합니다. 당신은 myChange의 CSS를 추가 할뿐만 아니라 필요합니다,하지만 당신은 .ng 입력도 의 CSS를 추가 할 필요가, 을 .ng - 떠나, 활성 .ng 입력 및 .ng - leave- 활성. 왼쪽으로 슬라이딩하고 오른쪽으로 슬라이딩 할 때도 고려해야합니다. 바퀴를 다시 만들려고하지 않고 나는이 대답을 가르쳐 주겠다. 그들은 매우 비슷한 것을 시도하고 있다고 생각한다. https://stackoverflow.com/a/21211543/2236808

1

일반적으로 ngAnimate는 이상한 아이디어이다. 때때로 애니메이션을 만드는 더 좋은 방법은 없지만, 귀하의 경우에는 CSS 만 사용하는 것이 좋습니다.

<div class="content" ng-class="{slide:panel.isSelected(1) }"> 
    <p class="longDescription"> 1</p> 
</div> 
<div class="content" ng-class="{slide:panel.isSelected(2) }"> 
    <p class="longDescription"> 2</p> 
</div> 
<div class="content" ng-class="{slide:panel.isSelected(3) }"> 
    <p class="longDescription"> 3</p> 
</div><br /> 

그리고 당신의 CSS에서 :

함께 컨텐츠 섹션을 대체하는 시도 그것은 잘 작동해야

@keyframes myChange { 
    from { 
     width: 0; 
    } to { 
     width: 100%; 
    } 
} 

.content { 
    overflow: hidden; 
    width: 0; 
} 

.slide { 
    animation: 1s myChange; 
} 

. 문제가 발생하면 Codepen 또는 JSFiddle을 생성하십시오.