Cách làm hộp phát triển trong JavaScript
Ví dụ: di chuyển dọc theo một đường dẫn phức tạp, với chức năng định thời gian khác với các đường cong Bezier hoặc hoạt ảnh trên khung vẽ Show Sử dụng setIntervalHoạt ảnh có thể được triển khai dưới dạng một chuỗi các khung – thường là những thay đổi nhỏ đối với thuộc tính HTML/CSS Chẳng hạn, thay đổi 1 từ 2 thành 3 sẽ di chuyển phần tử. Và nếu chúng ta tăng nó trong 4, thay đổi bằng 5 với độ trễ nhỏ, chẳng hạn như 50 lần mỗi giây, thì nó sẽ trông mượt mà. Đó là nguyên tắc giống như trong rạp chiếu phim. 24 khung hình mỗi giây là đủ để làm cho nó trông mượt màMã giả có thể trông như thế này
Ví dụ đầy đủ hơn về hoạt hình
Nhấp để xem bản trình diễn Kết quả mục lục. html
Sử dụng requestAnimationFrameHãy tưởng tượng chúng ta có một số hoạt ảnh chạy đồng thời Nếu chúng ta chạy chúng một cách riêng biệt, thì mặc dù mỗi cái có 6, nhưng trình duyệt sẽ phải sơn lại thường xuyên hơn nhiều so với mỗi 7Đó là bởi vì chúng có thời gian bắt đầu khác nhau, vì vậy "cứ sau 20 mili giây" lại khác nhau giữa các hoạt ảnh khác nhau. Các khoảng không được căn chỉnh. Vì vậy, chúng tôi sẽ có một số hoạt động độc lập trong vòng 7Nói cách khác, điều này
…Nhẹ hơn ba cuộc gọi độc lập 2Một số bản vẽ lại độc lập này nên được nhóm lại với nhau để giúp trình duyệt vẽ lại dễ dàng hơn và do đó tải ít tải CPU hơn và trông mượt mà hơn Có một điều nữa cần ghi nhớ. Đôi khi CPU bị quá tải hoặc có những lý do khác để vẽ lại ít thường xuyên hơn (chẳng hạn như khi tab trình duyệt bị ẩn), vì vậy chúng tôi thực sự không nên chạy nó mỗi ________ 07 Nhưng làm thế nào để chúng ta biết về điều đó trong JavaScript? . Nó giải quyết tất cả những vấn đề này và thậm chí nhiều hơn nữa cú pháp 5Điều đó lên lịch cho chức năng 21 chạy trong thời gian gần nhất khi trình duyệt muốn thực hiện hoạt ảnhNếu chúng ta thay đổi các phần tử trong 21 thì chúng sẽ được nhóm cùng với các hàm gọi lại 20 khác và với hoạt ảnh CSS. Vì vậy, sẽ có một tính toán lại hình học và sơn lại thay vì nhiềuGiá trị trả về 24 có thể được sử dụng để hủy cuộc gọi 0 21 có một đối số – thời gian trôi qua kể từ khi bắt đầu tải trang tính bằng mili giây. Thời gian này cũng có thể thu được bằng cách gọi hiệu suất. hiện nay()Thường thì 21 chạy rất sớm, trừ khi CPU quá tải hoặc pin laptop gần hết, hoặc có lý do nào khácMã bên dưới hiển thị thời gian giữa 10 lần chạy đầu tiên cho 20. Thông thường là 10-20ms 4hoạt hình có cấu trúcBây giờ chúng ta có thể tạo một chức năng hoạt hình phổ quát hơn dựa trên 20 6Hàm 29 chấp nhận 3 tham số mô tả cơ bản hoạt ảnh 50Tổng thời gian hoạt hình. Thích, 51 52Hàm tính thời gian, chẳng hạn như thuộc tính CSS 53 lấy phần thời gian đã trôi qua ( 54 khi bắt đầu, 55 khi kết thúc) và trả về kết thúc hoạt ảnh (như 56 trên đường cong Bezier)Chẳng hạn, một hàm tuyến tính có nghĩa là hoạt ảnh diễn ra đồng đều với cùng tốc độ 5đồ thị của nó. Điều đó giống như 57. Có nhiều biến thể thú vị hơn được hiển thị bên dưới 58Hàm lấy trạng thái hoàn thành hoạt ảnh và vẽ nó. Giá trị 59 biểu thị trạng thái hoạt hình bắt đầu và 00 – trạng thái kết thúcĐây là chức năng thực sự tạo ra hình ảnh động Nó có thể di chuyển phần tử 0…Hoặc làm bất cứ điều gì khác, chúng ta có thể tạo hoạt ảnh cho mọi thứ, theo bất kỳ cách nào Hãy tạo hoạt ảnh cho phần tử 01 từ 54 đến 03 bằng chức năng của chúng taNhấp vào phần tử cho bản demo Kết quả sinh động. js mục lục. html 1 2Mã cho nó 3Không giống như hoạt hình CSS, chúng ta có thể tạo bất kỳ chức năng định thời gian và bất kỳ chức năng vẽ nào tại đây. Chức năng thời gian không bị giới hạn bởi các đường cong Bezier. Và 04 có thể vượt ra ngoài các thuộc tính, tạo các yếu tố mới như hoạt hình pháo hoa hoặc thứ gì đóchức năng thời gianChúng tôi đã thấy chức năng thời gian tuyến tính, đơn giản nhất ở trên Hãy xem thêm về chúng. Chúng tôi sẽ thử hoạt hình chuyển động với các chức năng thời gian khác nhau để xem chúng hoạt động như thế nào sức mạnh của nNếu chúng ta muốn tăng tốc hoạt ảnh, chúng ta có thể sử dụng ________ 205 trong hàm ________ 206 Ví dụ, một đường cong parabol 4Đồ thị Xem trong hành động (bấm để kích hoạt) …Hoặc đường cong lập phương hoặc thậm chí lớn hơn 06. Tăng sức mạnh làm cho nó tăng tốc nhanh hơnĐây là biểu đồ cho 05 trong lũy thừa 09trong hành động Vòng cungChức năng 5Đồ thị Trở lại. bắn cungChức năng này thực hiện việc “bắn cung”. Đầu tiên chúng tôi "kéo dây cung", sau đó "bắn" Không giống như các chức năng trước đó, nó phụ thuộc vào một tham số bổ sung 40, “hệ số co giãn”. Khoảng cách “kéo dây cung” được xác định bởi nóMật mã 6Biểu đồ cho 41Đối với hoạt ảnh, chúng tôi sử dụng nó với giá trị cụ thể là 40. Ví dụ cho 41NảyHãy tưởng tượng chúng ta đang thả một quả bóng. Nó rơi xuống, sau đó bật trở lại một vài lần và dừng lại Hàm 44 cũng làm như vậy, nhưng theo thứ tự ngược lại. "nảy" bắt đầu ngay lập tức. Nó sử dụng vài hệ số đặc biệt cho điều đó 7trong hành động Hoạt hình đàn hồiThêm một hàm “co giãn” chấp nhận tham số bổ sung 40 cho “phạm vi ban đầu” 8Biểu đồ cho 46. Đang hành động cho 46đảo chiều. xoa dịu*Vì vậy, chúng tôi có một bộ sưu tập các chức năng thời gian. Ứng dụng trực tiếp của họ được gọi là “easeIn” Đôi khi chúng ta cần hiển thị hoạt ảnh theo thứ tự ngược lại. Điều đó đã được thực hiện với biến đổi “EASYOut” dễ dàngTrong chế độ “EASYOut”, chức năng 48 được đưa vào một trình bao bọc 49 9Nói cách khác, chúng ta có một hàm “biến đổi” 60 nhận một hàm thời gian “thông thường” và trả về trình bao bọc xung quanh nó 0Chẳng hạn, chúng ta có thể lấy hàm 44 được mô tả ở trên và áp dụng nó 1Sau đó, độ nảy sẽ không ở phần đầu mà ở phần cuối của hoạt ảnh. Trông thậm chí còn tốt hơn Kết quả Phong cách. css mục lục. html 2 3Ở đây chúng ta có thể thấy cách biến đổi thay đổi hành vi của hàm Nếu có hiệu ứng hoạt hình ở phần đầu, chẳng hạn như nảy – nó sẽ hiển thị ở phần cuối Trong biểu đồ phía trên số thoát bình thường có màu đỏ và số thoát nhẹ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . is blue.
dễ dàngInOutChúng tôi cũng có thể hiển thị hiệu ứng ở cả phần đầu và phần cuối của hoạt ảnh. Biến đổi được gọi là “EASInOut” Đưa ra chức năng thời gian, chúng tôi tính toán trạng thái hoạt hình như thế này 4Mã bao bọc 5Trong hành động, 63Kết quả Phong cách. css mục lục. html 2 7Phép biến đổi “easeInOut” nối hai biểu đồ thành một. 64 (thông thường) cho nửa đầu của hoạt hình và 62 (đảo ngược) – cho phần thứ haiHiệu quả được thấy rõ nếu chúng ta so sánh các đồ thị của 64, 62 và 68 của hàm thời gian 69
Như chúng ta có thể thấy, biểu đồ của nửa đầu của hoạt ảnh là 64 được thu nhỏ lại và nửa sau là 62 được thu nhỏ lại. Kết quả là hoạt ảnh bắt đầu và kết thúc với cùng một hiệu ứngThú vị hơn "vẽ"Thay vì di chuyển phần tử, chúng ta có thể làm điều gì đó khác. Tất cả những gì chúng ta cần là viết đúng 04Đây là kiểu gõ văn bản "nảy" hoạt hình Kết quả Phong cách. css mục lục. html 8 9Tóm lượcĐối với các hoạt ảnh mà CSS không thể xử lý tốt hoặc những hoạt ảnh cần kiểm soát chặt chẽ, JavaScript có thể trợ giúp. Hoạt ảnh JavaScript nên được triển khai thông qua 20. Phương thức tích hợp đó cho phép thiết lập chức năng gọi lại để chạy khi trình duyệt chuẩn bị sơn lại. Thông thường sẽ rất sớm, nhưng thời gian chính xác phụ thuộc vào trình duyệtKhi một trang ở chế độ nền, sẽ không có thao tác vẽ lại nào cả, vì vậy lệnh gọi lại sẽ không chạy. hoạt ảnh sẽ bị treo và sẽ không tiêu tốn tài nguyên. Thật tuyệt Đây là hàm trợ giúp 29 để thiết lập hầu hết các hoạt ảnh 0Tùy chọn
Chắc chắn chúng tôi có thể cải thiện nó, thêm nhiều chuông và còi hơn, nhưng hoạt ảnh JavaScript không được áp dụng hàng ngày. Chúng được sử dụng để làm điều gì đó thú vị và không chuẩn. Vì vậy, bạn muốn thêm các tính năng mà bạn cần khi bạn cần chúng Hoạt hình JavaScript có thể sử dụng bất kỳ chức năng thời gian nào. Chúng tôi đã đề cập đến rất nhiều ví dụ và phép biến đổi để làm cho chúng linh hoạt hơn nữa. Không giống như CSS, chúng tôi không giới hạn các đường cong Bezier ở đây |