2011-08-09 7 views
33

keyframes을 사용하면 요소를 DOM에 삽입하자마자 애니메이션을 적용 할 수 있습니다.CSS3 - DOM 제거시 전환

@-moz-keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

@-webkit-keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

@keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

#box { 
    -webkit-animation: fadeIn 500ms; 
    -moz-animation: fadeIn 500ms; 
    animation: fadeIn 500ms; 
} 

일부 유사한 기능은이 DOM에서 제거 직전 요소에 (CSS, 아니 자바 스크립트를 통해) 애니메이션을 적용 할 수 있나요 : 여기에 몇 가지 샘플 CSS이야? 아래는이 아이디어로 놀기 위해 만든 jsFiddle입니다. 해결책을 안다면 자유롭게 그것을 포크로 만들어라.

jsFiddle - http://jsfiddle.net/skoshy/dLdFZ/

답변

12

fadeOut라는 또 다른 CSS 애니메이션을 만들기 말한다. 그런 다음 요소를 제거 할 때, 그 새로운 애니메이션 요소에 animation 속성을 변경하고 애니메이션이 완료되면 요소의 실제 제거를 트리거 할 animationend 이벤트를 사용 :

$('.hide').click(function() { 
    if (!$(this).hasClass('disabled')) { 
     $('#fill').css('-webkit-animation', 'fadeOut 500ms'); 
     $('#fill').bind('webkitAnimationEnd',function(){ 
      $('#fill').remove(); 
      $('.show, .hide').toggleClass('disabled'); 
     }); 
    } 
}); 

See also my updated version of your jsFiddle. 작동하는지 적어도 나를 위해 사파리에서.

글쎄, 당신은 그 대신 .css() 클래스를 사용해야합니다.

jQuery는 아직 CSS 애니메이션을 "진짜"지원하지 않는다고 생각합니다. 따라서 당신은 그걸 없앨 수 있다고 생각하지 않습니다. webkitAnimationEnd. Firefox에서는 단지 animationend이라고합니다.

저는 CSS에서 이것을 할 방법이 없다고 확신합니다.

+0

이 꽤 영리하다,하지만 난 자바 스크립트 길을 갈거야 만약 내가 단지 ('전화 $ 수 '# fill '). fadeOut()'. 제가 정말로 찾고있는 것은 CSS만의 해결책입니다. 많은 포럼을 볼 때까지 엘리먼트의 변색이 가능하다는 것을 몰랐습니다. 그래서 누군가 엘리먼트를 어떻게 페이드 아웃시키는 지 알기를 바랍니다. – Steve

+6

그러나'.fadeOut()'는 자바 스크립트를 사용하여 애니메이션을 수행합니다.이것은 실제로 애니메이션에 CSS를 사용합니다. 자바 스크립트를 사용하여 적시에 트리거합니다. 어쨌든 실제로 JavaScript를 사용하여 요소를 삽입/제거하기 때문에 "CSS 만"은 임의적입니다. CSS가 삭제되기 바로 전에 어떤 일이 발생하도록 방아쇠를 당기는 방법은 없습니다. 그 "click me"div를 링크로 변환했다면, 페이드 아웃을 트리거하기 위해'.hide : active + # fill'을 셀렉터로 사용할 수 있지만 실제로는'animationend' 이벤트가 필요합니다 요소가 사라지면 요소를 제거하십시오. – mercator

+0

@ S.K .: 간단히 말해서, 아니오. CSS는 요소 추가 및 제거와 같은 DOM 조작과 관련이 없습니다. FadeIn 트릭은 엘리먼트가 처음 나타날 때마다 애니메이션이 발생하기 때문에 작동합니다. 엘리먼트가 FadeOut에 알기 위해서는 엘리먼트가 제거 될 것이라는 것을 알아야하며 이는 자바에서만 가능합니다. 그리고 메르카토르가 말했듯이 이미 요소를 제거하기 위해 자바 스크립트를 사용하고 있기 때문에 "CSS 전용"요구 사항은 임의적입니다. – joequincy

6

저는 자바 스크립트 용 구성 요소 라이브러리에서 작업 해 왔으며이 문제가 직접 발생했습니다. 나는 문제의 톤 자바 스크립트를 던질 수있는 혜택을 가지고 있지만, 당신은 이미 조금 사용하고 있기 때문에, 우아하게 저하 솔루션을 위해 다음을 고려하십시오 :

어떤 구성 요소/DOM 노드 제거시, '제거'라는 클래스.

는 그 다음 CSS에서 해당 클래스를 사용하여 애니메이션을 정의 할 수 있습니다 : 당신은 '제거'클래스를 추가 직후, 다시 자바 스크립트

.someElement.removing { 
    -webkit-animation: fadeOut 500ms; 
    -moz-animation: fadeOut 500ms; 
    animation: fadeOut 500ms; 
} 

그리고를, 당신은 '애니메이션을 확인 할 수 있어야한다 'css 속성을 추가하고, 존재하는 경우'animationEnd '에 연결할 수 있다는 것을 알고 있습니다. 그렇지 않으면 바로 요소를 제거하십시오. 나는 이것을 잠시 테스트했음을 기억한다. 예제 코드를 파헤쳐 볼 수 있는지 보겠습니다.

업데이트 :이 기술을 발굴하고 분리되는 DOM 요소에 대한 CSS3 애니메이션을 사용할 수 있도록 jQuery를위한 정말 멋진 플러그인을 쓰기 시작했습니다 . 자바가 추가로 필요하지 않습니다. http://www.github.com/arthur5005/jquery.motionnotion

매우 실험적이며 위험 부담은 있지만 도움과 의견을 많이 듣습니다. :) fadeIN 및 페이드 아웃이되지 CSS 애니메이션 CSS 전환을 사용해야 같은 이상적

+0

매우 흥미 롭습니다. 'append()'와'prepend()'와 같은 다른 함수에 대한 지원을 추가하면 그것을 사용할 것입니다. 어떻게 https://github.com/ai/transition-events와 비교합니까? –

+1

Hey Steve, 다른 사람들을위한 것이 대부분입니다. append() 및 prepend()를 지원하도록 플러그인을 업데이트했습니다. :) –

-4

..

+4

애니메이션이 DOM 삽입에 작동하며 전환이 작동하지 않습니다. –