Thứ năm, 19/09/2019 | 00:00 GMT+7

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:

Hình vuông màu đỏ di chuyển

Đừ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 }); 

Xoay hình vuông màu đỏ

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:

Hình vuông màu đỏ di chuyển ngược lại

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

Độ mờ hoạt ảnh hình vuông màu đỏ

, 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 .

Logo Alligator.io

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-dasharraystroke-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:

Bản vẽ logo đầu tiên của Alligator.io

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:

Lần vẽ thứ hai logo Alligator.io

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 !


Tags:

Các tin liên quan