Vẽ Biểu trưng Alligator.io SVG bằng GreenSock
Để tận dụng tối đa bài viết này, điều quan trọng là bạn phải hiểu rõ về JavaScript. Ta sẽ chỉ tập trung vào việc tìm hiểu GreenSock trong bài viết này, vì vậy nếu bạn chưa sử dụng JavaScript trước đây thì hãy học và quay lại!
Greensock là gì?
GreenSock là một thư viện hoạt ảnh JavaScript giúp ta tiết kiệm rất nhiều khi tạo hoạt ảnh, đặc biệt là khi nói đến khả năng trình duyệt chéo. GreenSock cũng có thể được gọi là GSAP (GreenSock Animation Platform) và tôi sẽ sử dụng thay thế cho cả hai. Về cơ bản GSAP có thể tạo hoạt ảnh cho bất kỳ thuộc tính nào bạn ném vào nó, từ thuộc tính CSS đến thuộc tính SVG.
GSAP có nhiều công cụ bạn có thể sử dụng, bao gồm:
- TweenLite , như tên của nó, là một version nhẹ
- TweenMax chứa đầy đủ sức mạnh của GSAP
- TimelineLite & TimelineMax là các công cụ sắp xếp thứ tự giúp quản lý thời gian của các hoạt ảnh của ta
GSAP có thể được cài đặt dưới dạng module npm
:
$ npm install gsap
Hoặc được tải thông qua thẻ script:
<script src="<https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js>"></script>
Kiến thức cơ bản về GreenSock
Để chứng minh GreenSock, tôi sẽ sử dụng Codepen. Bạn có thể đặt bút tại đây mà GreenSock đã được cài đặt .
Hãy bắt đầu từ cơ bản và tạo hoạt ảnh cho một hình vuông màu đỏ trên màn hình bằng cách sử dụng phương pháp to
của GSAP. Ta tạo hình vuông màu đỏ như vậy:
<style> #element { height: 150px; width: 150px; background: red; } </style> <div id="element"></div>
Để làm động điều này, ta truyền 3
đối số to
phương thức to
, các đối số là:
.to(elToAnimate, duration, propToAnimate)
Vì vậy, trong trường hợp của ta , phần tử ta muốn tạo hiệu ứng là #element
, thời lượng là 1
giây và vì ta muốn di chuyển hình vuông nên đối số cuối cùng của ta là một đối tượng nhắm đến thuộc tính x
. Mã của ta là:
TweenMax.to("#element", 1, { x: 100 })
Điều này cho ta những điều sau:
Đừng lo lắng về ảnh gif, nó mượt mà hơn nhiều trong đời thực, như bạn sẽ thấy trên Codepen!
Giả sử bây giờ ta muốn xoay hình vuông của bạn , tất cả những gì ta cần làm là:
TweenMax.to("#element", 3, { rotation: 360 });
Bạn có thể làm cho rotation
này trở nên vô hạn bằng cách thêm repeat:-1
vào đối tượng của ta . Bạn cũng có thể thêm thuộc tính yoyo
tính này sẽ luân phiên hoạt ảnh giữa ngược và xuôi.
Ta có thể bắt đầu từ một vị trí khác bằng phương thức fromTo
. Điều này tương tự như phương thức to
nhưng ta có thể cung cấp thêm một đối tượng mà ta muốn hoạt ảnh của bạn bắt đầu. Nếu ta muốn bình phương của ta bắt đầu ở x:300
thì ta chuyển điều này làm đối số thứ ba cho fromTo
.
Mã khôn ngoan như sau:
TweenMax.fromTo("#element", 3, {x: 300}, { x: 100 });
Trực quan:
Ta có thể làm nhiều hơn là thay đổi vị trí của hình vuông của ta , ta cũng có thể nhắm đến thông tin như độ mờ:
TweenMax.fromTo("#element", 5, {opacity: 0}, { opacity: 1 });
, ta sử dụng phương thức fromTo
và bắt đầu opacity
của ta ở 0
và kết thúc ở 1
.
Ok, tôi chắc chắn rằng bạn đang cực kỳ chán nản ngay bây giờ vì ta hãy thành thật mà nói ở trên khá nhàm chán. Hãy làm điều gì đó thú vị hơn, ta sẽ sử dụng biểu tượng Alligator.io
và làm điều gì đó thú vị!
Hoạt ảnh logo Alligator.io SVG
Tôi đã lấy trộm logo Alligator.io
từ trang web, hy vọng Seb không phiền. Đây là bút khởi động với SVG bên trong của ta .
Vì vậy, mục tiêu của ta với hoạt ảnh này sẽ là draw
logo và mờ dần trong màu xanh lá cây.
Điều đầu tiên ta cần làm là cài đặt một stroke-dasharray
và stroke-dashoffset
trên đồ họa của ta . Đây là những thuộc tính ta sử dụng để mô phỏng một hiệu ứng vẽ, bạn có thể đọc thêm về các thuộc tính này tại đây .
Trong CSS của ta , ta cài đặt những điều sau:
#alligator path { stroke-dasharray: 600; stroke-dashoffset: 600; fill-opacity: 0; // we will animate the fill in }
Với vị trí này, con cá sấu của ta giờ đã biến mất. Hãy quay lại hoạt ảnh bằng TweenMax
.
Ta sử dụng phương thức to
mà ta đã sử dụng ở trên, sau đó ta đặt tập hợp stroke-dashoffset
của ta là 0
.
TweenMax.to("#alligator path", 15, { "stroke-dashoffset": 0 })
Ta sử dụng cùng một bộ chọn mà ta đã sử dụng trong #alligator path
CSS #alligator path
, đặt khoảng thời gian là 0
và sau đó đặt bộ stroke-dashoffset
của ta thành 0
. Điều này mang lại một hiệu ứng vẽ thực sự tuyệt vời:
Thật tuyệt làm sao? !! ✨
Bây giờ điều tiếp theo ta cần làm là lấy lại màu sắc của ta . Ta làm điều này bằng cách thêm một thuộc tính bổ sung vào đối tượng của ta .
TweenMax.to("#alligator path", 15, { "stroke-dashoffset": 0, "fill-opacity": 1 })
Vấn đề mà ta hiện đang gặp phải là thời lượng khá dài và điều này trông hơi kỳ lạ với thuộc tính fill-opacity
. Lý tưởng nhất là những gì ta muốn là vẽ đầu tiên, sau đó khi hoàn thành ta sẽ điền vào hình ảnh. Cách cũ để đạt được điều này là có hai hoạt ảnh riêng biệt với hoạt ảnh thứ hai có độ trễ phù hợp với thời lượng của hoạt ảnh đầu tiên. GreenSock cung cấp cho ta TimelineMax
tuyệt vời thực hiện điều này cho ta .
Dòng thời gianMax
Điều đầu tiên ta cần làm là tạo một thể hiện của lớp TimelineMax
như sau:
const tl = new TimelineMax()
Sau đó, ta gọi phương thức to
trên version của ta và chuyển cho nó hiệu ứng vẽ của ta :
tl.to("#alligator path", 10, { "stroke-dashoffset": 0 })
Sau đó, ta gọi lại phương thức to
nhưng lần này là đối với fill-opacity
của ta :
tl.to("#alligator path", 5, { "fill-opacity": 1 })
Với điều đó tại chỗ, sau đó ta nhận được những điều sau:
TimelineMax
cực kỳ mạnh mẽ và điều này chỉ mới làm trầy xước bề mặt, việc tạo các hoạt ảnh tuần tự chưa bao giờ dễ dàng hơn thế!
Kết luận
Đây là phần giới thiệu nhanh về GreenSock và các phương pháp phổ biến nhất. Đó là một công cụ thực sự mạnh mẽ và nếu bạn thích tạo ảnh động thì bạn thực sự nên cân nhắc sử dụng nó cho dự án tiếp theo của bạn !
Các tin liên quan