Hoạt ảnh xoay liên tục CSS3 (Giống như đồng hồ mặt trời đang tải)


120

Tôi đang cố gắng tái tạo chỉ báo hoạt động kiểu Apple (biểu tượng tải mặt trời) bằng cách sử dụng hoạt ảnh PNG và CSS3. Tôi có hình ảnh xoay và thực hiện liên tục, nhưng dường như có độ trễ sau khi hoạt ảnh kết thúc trước khi thực hiện lần quay tiếp theo.

@-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;
    }

Tôi đã thử thay đổi thời lượng hoạt ảnh nhưng nó không có gì khác biệt, nếu bạn làm chậm nó ngay lập tức là 5s thì rõ ràng hơn là sau lần quay đầu tiên sẽ có một khoảng dừng trước khi nó quay lại. Đó là sự tạm dừng này mà tôi muốn thoát khỏi.

Bất kỳ sự giúp đỡ được đánh giá cao, cảm ơn.


14
Mã dành riêng cho Webkit không làm cho nó ít CSS3 hơn .. xem xét rằng không có nhà cung cấp nào khác đã cung cấp các chức năng tương đương vào thời điểm đó :)
19h

4
Hoạt ảnh không nên chạy từ 0 đến 359? Nếu nó chạy 0-360, sau đó bạn sẽ phải khung 0 chơi hai lần, vì khung 0 và khung 360 sẽ là như nhau ...
Brad Parks

1
@BradParks Mặt khác, nếu bạn chuyển từ 0 đến 359, thì hoạt ảnh diễn ra ở 359,5 sẽ bị bỏ qua hoàn toàn. Trong hầu hết các trường hợp, sự chồng chéo của 0 và 360 sẽ nhanh đến mức khó nhận ra.
Blazemonger

@Blazemonger không nhất thiết. Bạn có thể tự mình thử trong jsfiddle và thấy rằng tùy thuộc vào thời lượng hoạt ảnh, nó có thể không quá tinh tế.
Ilan Biala

1
toàn bộ thứ '359 độ' này thật ngớ ngẩn - bạn không kiểm soát được bước của hoạt ảnh. giả sử hoạt ảnh 1 giây với 60 khung hình / giây có 6 độ trên mỗi khung hình, vì vậy bạn nên dừng lại ở '354 độ'. nhưng như tôi đã nói, bạn không có quyền kiểm soát tốc độ khung hình ở đây nên nó khá vô ích. Tôi tưởng tượng một triển khai thông minh có thể phát hiện 0-360 và điều chỉnh cho phù hợp. Tôi vừa nhân thời gian và góc với 100 - tức là. 0 độ đến 36000 độ nên trục trặc lý thuyết sẽ chỉ xảy ra sau mỗi 100 lần quay. nhưng tôi đã tìm thấy bạn đang đi để có được ổn định hình ảnh động không có vấn đề gì bạn làm anyway
Simon_Weaver

Câu trả lời:


71

Vấn đề của bạn ở đây là bạn đã cung cấp một -webkit-TRANSITION-timing-functionkhi bạn muốn một -webkit-ANIMATION-timing-function. Các giá trị từ 0 đến 360 của bạn sẽ hoạt động bình thường.


Một lỗi sao chép-dán điển hình. Cảm ơn rất nhiều! (Tôi thực sự nhận được css của mình từ shareaholic và do thuộc tính được đặt tên sai, nó đã sử dụng easechức năng định thời gian mặc định ).
doekman

55

Bạn cũng có thể nhận thấy một chút độ trễ vì 0deg và 360deg là cùng một vị trí, vì vậy nó đang đi từ vị trí 1 trong một vòng tròn trở lại vị trí 1. Nó thực sự không đáng kể, nhưng để khắc phục, tất cả những gì bạn phải làm là thay đổi 360deg thành 359deg

jsfiddle của tôi minh họa hoạt ảnh của bạn:

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

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

Ngoài ra, những gì có thể giống hơn của biểu tượng tải quả táo sẽ là một hoạt ảnh chuyển đổi độ mờ / màu của các sọc màu xám thay vì xoay biểu tượng.


3
JS Fiddle của bạn chứa cách triển khai ngắn gọn nhất mà tôi đã thấy để xoay hình ảnh đơn giản - hoàn hảo (và cảm ơn bạn đã đăng).
Philip Murphy

Cảm ơn, hãy cho tôi biết nếu bạn cần bất kỳ trợ giúp nào khác, nhân tiện, tôi đã sử dụng tiền tố webkit cho hoạt ảnh nhưng bạn cũng nên bao gồm tiền tố mozilla vì chúng sử dụng quy tắc -moz-css thay thế.
Ilan Biala

bạn cũng có thể nhân thời gian và góc với 100 - tức là. 0 độ đến 36000 độ :-)
Simon_Weaver

@Simon_Weaver vẫn cần phải là 35999deg để không nhìn thấy bất kỳ khung hình kép nào.
Ilan Biala

2
@IlanBiala ngoại trừ tôi rất nghi ngờ card đồ họa của bạn đang chạy ở tốc độ 720fps ;-) Bạn không thể biết mức tăng giữa các khung hình là bao nhiêu nếu không biết tốc độ khung hình. Nếu bất cứ điều gì bạn cũng có thể đặt 348 độ vì ở nửa giây ở tốc độ 60 khung hình / giây, mỗi khung hình sẽ tăng 12 độ. Tôi chỉ muốn đặt 360 và hy vọng một ai đó thông minh được lập trình trình duyệt để tự động điều chỉnh
Simon_Weaver

27

Bạn có thể sử dụng hoạt ảnh như thế này:

-webkit-animation: spin 1s infinite linear;

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

2
Giải pháp tuyệt vời và dễ dàng!
TheLD


1

Mã của bạn có vẻ đúng. Tôi cho rằng đó là điều gì đó liên quan đến thực tế là bạn đang sử dụng .png và cách trình duyệt vẽ lại đối tượng khi xoay là không hiệu quả, gây ra hiện tượng treo (bạn đang thử nghiệm trình duyệt nào?)

Nếu có thể, hãy thay thế .png bằng một cái gì đó gốc.

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

Chrome không cho tôi tạm dừng khi sử dụng phương pháp này.


Hoàn hảo, tôi khá chắc chắn rằng giả định của bạn là đúng, tuy nhiên tôi đang sử dụng PNG vì biểu tượng tải của tôi không phải là đồng hồ mặt trời mà nó là biểu tượng kiểu hạt nhân ... Tuy nhiên, không nhất thiết phải như vậy, vì vậy tôi có thể thay đổi nó thành phương pháp bạn nhé. đề nghị - cảm ơn!
Gcoop

1

Tôi đã tạo một thư viện nhỏ cho phép bạn dễ dàng sử dụng một cách dễ dàng mà không cần hình ảnh.

Nó sử dụng CSS3 nhưng lại rơi vào JavaScript nếu trình duyệt không hỗ trợ nó.

// 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();

Ví dụ .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.