CSS3 Continuous Rotate Animation (로드하는 해시계처럼)


120

PNG 및 CSS3 애니메이션을 사용하여 Apple 스타일 활동 표시기 (선달로드 아이콘)를 복제하려고합니다. 이미지가 회전하고 계속되는데 애니메이션이 끝난 후 다음 회전을하기 전에 지연이있는 것 같습니다.

@-webkit-keyframes rotate {
  from {
    -webkit-transform: rotate(0deg);
  }
  to { 
    -webkit-transform: rotate(360deg);
  }
}
#loading img
{
    -webkit-animation-name:             rotate; 
    -webkit-animation-duration:         0.5s; 
    -webkit-animation-iteration-count:  infinite;
    -webkit-transition-timing-function: linear;
    }

애니메이션 지속 시간을 변경해 보았지만 차이가 없습니다. 5 초를 느리게하면 첫 번째 회전 후 다시 회전하기 전에 일시 중지가 있다는 것이 더 분명합니다. 제거하고 싶은이 일시 정지입니다.

어떤 도움이라도 대단히 감사합니다.


14
Webkit 전용 코드는 CSS3 .. 그 당시에 동일한 기능을 제공하는 다른 공급자가 없다는 점을 고려할 때 CSS3를 줄이지 않습니다. :)
19h

4
애니메이션이 0에서 359까지 실행되지 않아야합니까? 그것은 360-0에서 실행 한 경우, 당신은 프레임 0과 프레임 (360)이 동일 할 것이기 때문에, 두 번 재생 0 프레임이있을 것이다 ...
브래드 공원

1
@BradParks 반면에 0에서 359로 이동하면 359.5에서 발생해야하는 애니메이션을 완전히 건너 뜁니다. 대부분의 경우 0과 360의 겹침은 눈에 띄지 않을 정도로 빠릅니다.
Blazemonger

@Blazemonger가 반드시 필요한 것은 아닙니다. jsfiddle에서 직접 시도해보고 애니메이션 기간에 따라 미묘하지 않을 수 있음을 확인할 수 있습니다.
Ilan Biala 2014 년

1
이 모든 '359도'는 어리석은 일입니다. 애니메이션 단계를 제어 할 수 없습니다. 프레임 당 6 도인 60fps의 1 초 애니메이션을 가정하면 '354도'에서 멈춰야합니다. 하지만 제가 말했듯이 여기에서는 프레임 속도를 제어 할 수 없으므로 꽤 쓸모가 없습니다. 똑똑한 구현이 0-360을 감지하고 그에 따라 조정할 수 있다고 생각합니다. 시간과 각도에 100을 곱했습니다. 0도에서 36000도까지 이론적 인 결함은 100 회전마다 발생합니다. 하지만 어쨌든 나는 당신이 어쨌든 당신이 무엇을하든 애니메이션 결함을 얻을 것이라는 것을 발견했습니다
Simon_Weaver 2014 년

답변:


71

여기서 문제 -webkit-TRANSITION-timing-function-webkit-ANIMATION-timing-function. 0에서 360 사이의 값이 제대로 작동합니다.


일반적인 복사-붙여 넣기 오류입니다. 감사합니다! (실제로 shareaholic 에서 내 CSS를 얻었 으며 잘못된 이름의 속성 때문에 기본 ease타이밍 기능을 사용했습니다 ).
doekman

55

0deg와 360deg가 같은 지점이므로 약간의 지연이있을 수 있습니다. 따라서 원의 지점 1에서 지점 1로 다시 이동합니다. 정말 중요하지 않지만 수정하려면 360deg를 다음으로 변경하기 만하면됩니다. 359deg

내 jsfiddle은 애니메이션을 보여줍니다.

#myImg {
    -webkit-animation: rotation 2s infinite linear;
}

@-webkit-keyframes rotation {
    from {-webkit-transform: rotate(0deg);}
    to   {-webkit-transform: rotate(359deg);}
}

또한 사과 로딩 아이콘과 더 비슷할 수있는 것은 아이콘을 회전하는 대신 회색 줄무늬의 불투명도 / 색상을 전환하는 애니메이션입니다.


3
귀하의 JS Fiddle에는 간단한 이미지 회전에 대해 본 것 중 가장 간결한 구현이 포함되어 있습니다. 완벽합니다 (게시 해 주셔서 감사합니다).
Philip Murphy

다른 도움이 필요하면 알려주세요. 애니메이션에 웹킷 접두사를 사용했지만 대신 -moz-css 규칙을 사용하기 때문에 mozilla 접두사도 포함해야합니다.
Ilan Biala 2013

시간과 각도에 100을 곱할 수도 있습니다. 0도 ~ 36000도 :-)
Simon_Weaver

@Simon_Weaver는 이중 프레임을 표시하지 않으려면 35999deg 여야합니다.
Ilan Biala 2014 년

2
@IlanBiala 그래픽 카드가 720fps로 실행되고 있다는 것을 매우 의심하는 것을 제외하고는 ;-) 프레임 속도를 알지 않고는 프레임 사이의 증분이 무엇인지 알 수 없습니다. 60fps에서 0.5 초가되면 각 프레임이 12 도씩 진행되기 때문에 348도를 넣을 수 있습니다. 차라리 그냥 자동으로 프로그래밍 브라우저를 스마트 360과 희망의 사람을 넣어 조정할 것
Simon_Weaver

27

다음과 같은 애니메이션을 사용할 수 있습니다.

-webkit-animation: spin 1s infinite linear;

@-webkit-keyframes spin {
    0%   {-webkit-transform: rotate(0deg)}
    100% {-webkit-transform: rotate(360deg)}
}

2
훌륭하고 쉬운 솔루션!
TheLD


1

코드가 올바른 것 같습니다. 나는 그것이 당신이 .png를 사용하고 있다는 사실과 관련이 있고 브라우저가 회전시 객체를 다시 그리는 방식이 비효율적이어서 중단을 유발한다고 가정합니다 (어떤 브라우저에서 테스트하고 있습니까?)

가능하면 .png를 네이티브로 대체하십시오.

보다; http://kilianvalkhof.com/2010/css-xhtml/css3-loading-spinners-without-images/

이 방법을 사용하면 Chrome이 중단되지 않습니다.


완벽합니다. 귀하의 가정이 맞다고 확신합니다.하지만 로딩 아이콘이 해시계가 아니기 때문에 PNG를 사용하고 있습니다. 핵 스타일의 기호입니다. 그래야 할 필요는 없습니다. 제안-감사합니다!
Gcoop 2010

1

이미지 없이도 쉽게 스 로버를 사용할 수 있는 작은 라이브러리 를 만들었습니다 .

CSS3를 사용하지만 브라우저가 지원하지 않으면 JavaScript로 돌아갑니다.

// First argument is a reference to a container element in which you
// wish to add a throbber to.
// Second argument is the duration in which you want the throbber to
// complete one full circle.
var throbber = throbbage(document.getElementById("container"), 1000);

// Start the throbber.
throbber.play();

// Pause the throbber.
throbber.pause();

.

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