9 điểm bởi GN⁺ 2025-04-04 | 2 bình luận | Chia sẻ qua WhatsApp
  • Anime.js là một thư viện JavaScript nhanh và đa năng, có thể tạo hoạt ảnh cho mọi thứ trên web
  • V4 được viết lại toàn bộ cấu trúc, cải thiện hiệu năng đáng kể và tái thiết kế API theo hướng hiện đại hơn
  • Đặc biệt, trải nghiệm lập trình viên được cải thiện nhờ hỗ trợ ES Module, tối ưu tree shaking và cải tiến việc kết hợp các hoạt ảnh phức tạp

Tóm tắt các thay đổi chính trong Anime.js V4

  • ES module hóa và thay đổi API

    • Mọi tính năng giờ đều được cung cấp dưới dạng ES module (anime()animate())
    • Thuận lợi cho tree shaking nên có thể chỉ import những tính năng cần dùng
    • Cú pháp được đổi từ anime({ targets })animate(targets, params)
  • Các thay đổi API chính

    • easeInOutQuad'inOutQuad' (bỏ tiền tố)
    • Đổi tên hàm callback:
      • begin()onBegin()
      • update()onUpdate()
      • complete()onComplete()
      • change()onRender()
      • Các callback liên quan đến loop được hợp nhất thành một onLoop()
    • .finished.then() để thay đổi cách xử lý Promise
    • Cách biểu diễn giá trị đổi từ { value: 100 }{ to: 100 }
    • round: 100modifier: utils.round(2) để điều chỉnh số liệu linh hoạt hơn
  • Cải thiện cấu hình và kết hợp hoạt ảnh

    • Giá trị easing mặc định được đổi thành outQuad
    • Khi trùng hoạt ảnh cùng thuộc tính trên cùng target, tween trước đó sẽ bị hủy theo mặc định (composition: 'replace')
      • composition: 'none' → cách của V3 (cho phép lồng chồng)
      • composition: 'add' → có thể áp dụng hoạt ảnh cộng dồn
  • Thay đổi liên quan đến cách phát

    • direction: 'reverse' hoặc 'alternate' → được tách thành reversed: true, alternate: true và có thể dùng đồng thời
    • loop: 1 → loop mặc định được đổi thành 0
  • Cải tiến hệ thống timeline

    • anime.timeline()createTimeline()
    • Có thể dùng loop, reversed trong hoạt ảnh con
    • Có thể thiết lập tùy chọn chung cho các phần tử con bằng thuộc tính defaults
    • Bổ sung các tính năng điều khiển thời gian linh hoạt hơn như set(), label, stagger()
    • Các thuộc tính CSS transform được nối tiếp tự nhiên hơn giữa các hoạt ảnh con
  • Stagger và hoạt ảnh SVG

    • anime.stagger() → import trực tiếp stagger() để sử dụng
    • anime.path() → dùng svg.createMotionPath()
    • Các thuộc tính SVG như strokeDashoffset, points cũng được xử lý bằng svg.drawLine(), svg.morphTo()
  • Tách riêng các hàm tiện ích

    • anime.get()utils.get()
    • anime.set()utils.set()
    • anime.remove()utils.remove()
    • anime.round()utils.round()
  • Thay đổi cấu hình engine

    • anime.suspendWhenDocumentHidden = falseengine.pauseWhenHidden = false
    • anime.speed = 0.5engine.playbackRate = 0.5
  • Cải thiện hiệu năng và cấu trúc

    • Refactor toàn bộ mã nguồn giúp giảm mức sử dụng bộ nhớ và tăng hiệu năng
    • Viết lại hệ thống tween giúp giảm lỗi khi có hoạt ảnh trùng lặp
    • Hỗ trợ hoạt ảnh cộng dồn với composition: 'add'
    • Cải thiện tính liên kết tự nhiên khi cấu thành CSS Transform

Tính năng mới

  • Hỗ trợ hoạt ảnh cho biến CSS: ví dụ animate('#target', { '--radius': '20px' })
  • Hỗ trợ hoạt ảnh from: có thể dùng dạng { from: 50, to: 100 }
  • Hỗ trợ alpha trong màu hex: hỗ trợ định dạng như #FF4433AA
  • Bổ sung tính năng createTimer:
    • Thay thế setTimeout, setInterval
    • Có thể dùng onLoop, onUpdate, onComplete v.v.
    • Có thể dùng cho game loop nhờ điều chỉnh frameRate
  • Hỗ trợ tốc độ khung hình biến thiên: có thể cấu hình riêng cho từng animation, timeline và timer

Đặc điểm của Anime.js

  • API trực quan

    • Cung cấp API hoạt ảnh mạnh mẽ nhưng vẫn dễ sử dụng.
    • Hỗ trợ tham số theo từng thuộc tính và hệ thống keyframe linh hoạt.
    • Cung cấp sẵn easing tích hợp và các tính năng transform nâng cao.
  • Bộ công cụ SVG

    • Các tiện ích SVG tích hợp giúp dễ dàng thực hiện biến đổi hình dạng, bám theo motion path và vẽ nét.
    • Bao gồm morphing, line drawing và motion path.
  • Scroll Observer

    • Cung cấp Scroll Observer API cho phép đồng bộ và kích hoạt hoạt ảnh theo thao tác cuộn.
    • Hỗ trợ nhiều chế độ đồng bộ và ngưỡng nâng cao.
  • Stagger nâng cao

    • Hàm tiện ích Stagger tích hợp giúp tạo hiệu ứng ấn tượng chỉ trong vài giây.
    • Bao gồm stagger theo thời gian, stagger theo giá trị và stagger theo vị trí timeline.
  • Tính năng spring và drag

    • Thông qua Draggable API, có thể kéo, snap, flick và ném các phần tử HTML.
    • Cung cấp nhiều tùy chọn cấu hình, callback đầy đủ và các phương thức hữu ích.
  • Timeline API

    • Timeline API mạnh mẽ giúp điều phối chuỗi hoạt ảnh và đồng bộ callback.
    • Hỗ trợ đồng bộ hoạt ảnh, vị trí thời gian nâng cao và cài đặt phát.
  • Hoạt ảnh responsive

    • Có thể dùng Scope API để dễ dàng tạo hoạt ảnh phản hồi theo media query.
    • Bao gồm media query, phần tử gốc tùy chỉnh và các phương thức scope.

2 bình luận

 
kaydash 2025-04-06

Wow, quá đỉnh

 
GN⁺ 2025-04-04
Ý kiến trên Hacker News
  • Khi cuộn trang đích đó, cảm giác mượt và nhanh hơn nhiều so với dự đoán
  • Nó được làm tốt đến mức khó tin là thứ này thực sự tồn tại. Cảm giác như sự sáng tạo của Internet đầu những năm 2000 gặp chuẩn thiết kế tinh tế của ngày nay
  • Trang chủ đó là một trong những hoạt ảnh tương tác phức tạp và nhiều lớp nhất mà tôi từng thấy chạy rất mượt trên trình duyệt di động. FPS mang lại cảm giác như Doom 2016 chạy trên một chiếc PC mạnh
  • Đây là lần đầu tiên tôi không ghét scroll hijacking. Thực sự rất mượt
  • Tôi đã nghĩ trang chính rất ấn tượng, nhưng sau khi xem tài liệu thì mới thấy thực sự đáng kinh ngạc. Làm tốt lắm. Tôi rất háo hức muốn thử WAAPI
  • Tôi thích trang này, nhưng khi truy cập <a href="https:&#x2F;&#x2F;animejs.com&#x2F;documentation&#x2F;scope&#x2F;" rel="nofollow">https://animejs.com/documentation/scope/</a>; trên Firefox(136.0.3) với ublock origin đang bật thì tab lập tức bị crash. Đó là một trải nghiệm khá hài hước ngay sau khi vừa cuộn qua phần intro animation cực kỳ ấn tượng
  • Tôi thích việc có thể nắm và kéo thanh chỉ báo cuộn của trình duyệt mà hoạt ảnh vẫn cập nhật mượt mà (safari mobile)
  • Có thể CPU của tôi đã quá cũ hoặc tôi đang dùng một trình duyệt không phổ biến (Microsoft Edge), nhưng website này rất chậm (cập nhật chưa đến 1 lần mỗi giây), tab ngay lập tức bắt đầu dùng 80% CPU và quạt kêu rất to. Tôi đang dùng Intel i7 thế hệ 8
  • Nó hoạt động thực sự tốt trên trình duyệt Android không phổ biến mà tôi đang dùng. Tôi có thể đánh giá cao thư viện này
  • Trang đích thật sự ấn tượng
    • Vấn đề duy nhất là khi kiểm tra ví dụ responsive layout, nếu thay đổi kích thước cửa sổ trình duyệt thì cuộn sẽ bị đặt lại về đầu trang