마지막 프레임에서 CSS3 애니메이션 중지


180

클릭시 4 부분의 CSS3 애니메이션이 재생되지만 애니메이션의 마지막 부분은 화면에서 벗어납니다.

그러나 일단 재생되면 항상 원래 상태로 돌아갑니다. 누구든지 마지막 CSS 프레임 (100 %) 에서 중지하는 방법 또는 재생 된 전체 div를 제거하는 방법을 알고 있습니다 .

@keyframes colorchange {
  0%   { transform: scale(1.0) rotate(0deg); }
  50%  { transform: rotate(340deg) translate(-300px,0px) }
  100% { transform: scale(0.5) rotate(5deg) translate(1140px,-137px); }
}

Nick, 사용중인 CSS와 HTML을 게시 할 수 있습니까?
Sebastian Patane Masuelli

안녕하세요 Sebastian, CSS와 자바 스크립트로 내 질문을 업데이트했습니다. 내가 사용하는 유일한 html은 onclick 기능이있는 div입니다.
user531192

답변:


375

당신은 찾고 있습니다 :

animation-fill-mode: forwards;

canIuse의 MDN 및 브라우저 지원 목록에 대한 추가 정보 .


8
크롬에서 작동하는지 알고 있습니까? 운이 없다
user531192

4
정답으로 받아주십시오. 이것에 대한 자세한 설명 : 4waisenkinder.de/blog/2014/10/13/...
MIRON

@ user531192 Chrome / Webkit 브라우저의 경우 -webkit-animation-fill-mode: forwards;
eivindml

Chrome은 더 이상 -webkit- 접두사가 더 이상 필요하지 않습니다 (최소한 v49 이상)
Capsule

1
내가 가지고있는 한 가지 문제는 100% {}또는 to {}설정이 없었기 때문에 animation-fill-mode: forwards;내 애니메이션 에서도 여전히 나를에 버릴 것 0%입니다. (저는 @for 루프를 사용하여 애니메이션을 만들고 수동으로 from{}및을 추가하는 것을 잊었습니다 to{});
Phil Tune

25

animation특성을 속기 특성 정의 에 추가하려는 경우 하위 특성의 순서는 다음과 같습니다.

animation-name- 기본 none

animation-duration- 기본 0s

animation-timing-function- 기본 ease

animation-delay- 기본 0s

animation-iteration-count- 기본 1

animation-direction- 기본 normal

animation-fill-mode- 당신은 이것을 설정해야합니다 forwards

animation-play-state- 기본 running

따라서 가장 일반적인 경우 결과는 다음과 같습니다.

animation: colorchange 1s ease 0s 1 normal forwards;

여기 에서 MDN 설명서를 참조 하십시오


19
-webkit-animation-fill-mode: forwards; /* Safari 4.0 - 8.0 */
animation-fill-mode: forwards;

브라우저 지원

  • Chrome 43.0 (4.0-웹킷-)
  • IE 10.0
  • Mozilla 16.0 (5.0 -moz-)
  • Shafari 4.0-웹킷-
  • 오페라 15.0 -webkit- (12.112.0 -o-)

용법:-

.fadeIn {
  animation-name: fadeIn;
    -webkit-animation-name: fadeIn;

    animation-duration: 1.5s;
    -webkit-animation-duration: 1.5s;

    animation-timing-function: ease;
    -webkit-animation-timing-function: ease;

     animation-fill-mode: forwards;
    -webkit-animation-fill-mode: forwards;
}


@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

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

  to {
    opacity: 1;
  }
}

5

가장 좋은 방법은 최종 상태를 CSS의 주요 부분에 두는 것 같습니다. 여기 에서처럼 너비를에 넣으면 220px마침내가됩니다 220px. 그러나 시작0px;

div.menu-item1 {
  font-size: 20px;
  border: 2px solid #fff;
  width: 220px;
  animation: slide 1s;
  -webkit-animation: slide 1s; /* Safari and Chrome */
}
@-webkit-keyframes slide { /* Safari and Chrome */
  from {width:0px;}
  to {width:220px;}
}  

이것은 내가 생각하는이 문제를 다루는 가장 좋은 방법입니다.
Drew Baker

3

webkitAnimationName을 아무것도 다시 설정하여 객체의 CSS를 기본 상태로 다시 설정하는 문제는 아닙니다. 상태를 재설정하는 setTimeout 함수를 제거하면 끝나지 않은 상태로 유지되지 않습니까?


1

방금 비슷한 대답을 게시했으며 아마도 다음을 살펴보고 싶을 것입니다.

http://www.w3.org/TR/css3-animations/#animation-events-

시작 및 중지와 같은 애니메이션의 측면을 찾은 다음 '중지'이벤트가 시작되면 원하는 모든 것을 dom에 수행 할 수 있습니다. 나는 얼마 전에 이것을 시도했지만 작동 할 수는 있지만 당분간 웹킷으로 제한 될 것이라고 생각합니다 (그러나 아마도 이미 수락했을 것입니다). Btw, 나는 2 개의 답변에 대해 동일한 링크를 게시 했으므로이 일반적인 조언을 제공 할 것입니다 .W3C를 확인하십시오. 규칙을 작성하고 표준을 설명합니다. 또한 웹킷 개발 페이지는 매우 중요합니다.



-2

필자는 채우기 모드에 사용하려는 제한이 있다는 것을 오늘 배웠습니다. 이것은 Apple 개발자의 것입니다. 소문은 * 약 * 6이지만 확실하지는 않습니다. 또는 클래스의 초기 상태를 애니메이션 종료 방법으로 설정 한 다음 / 0 %에서 * initialize *로 설정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.