+2

Lotie - Gia vị cho chiếc web sinh động hơn

Lottie là một thư viện dành cho cả Android, iOS, Web và Windows phân tích cú pháp các hoạt ảnh Adobe After Effects được xuất dưới dạng json với Bodymovin và hiển thị chúng nguyên bản trên thiết bị di động và trên web. Nhưng mình làm web nên chỉ nói liên quan web thui nha.

Có thể tạo và gửi các hình ảnh động đẹp mắt mà không cần dev hì hục code bục mặt nữa. Kiểu như mấy ảnh tung tăng này nè

Tất cả các hoạt ảnh trên đều được tạo trong After Effects và có thể được xuất sang Lottie bằng cách sử dụng plugin Bodymovin hoặc plugin LottieFiles cho After Effects và được hiển thị nguyên bản mà không cần thêm nỗ lực kỹ thuật nào.

1. Bắt đầu nào

Bodymovin có thể hiển thị các tệp Lottie JSON trên web.

Đầu tiên, lấy thư viện javascript trình phát bodymovin. Nó được lưu trữ tĩnh tại https://cdnjs.com/libraries/bodymovin hoặc bạn có thể tải javascript trực tiếp bằng cách nhấp Get Player nha.

Add zô html ạ

<script src="js/bodymovin.js" type="text/javascript"></script>
<!-- OR -->
<script src="https://cdnjs.com/libraries/bodymovin" type="text/javascript"></script>

Bodymovin cũng có sẵn trên npm và bower.

Sau đó, phát hoạt ảnh đơn giản như:

var animation = bodymovin.loadAnimation({
  container: document.getElementById('lottie'), // Required
  path: 'data.json', // Required
  renderer: 'svg/canvas/html', // Required
  loop: true, // Optional
  autoplay: true, // Optional
  name: "Hello World", // Name for future reference. Optional.
})

2. Cài đặt trình phát HTML

URL tĩnh

Hoặc bạn có thể sử dụng tệp script từ đây: https://cdnjs.com/libraries/lottie-web

Từ phần Extension

Hoặc tải trực tiếp từ plugin AE bằng cách nhấp vào Get Player

lottie light

Phần mở rộng bao gồm phần mở rộng lottie_light.js sẽ phát các hoạt ảnh được xuất dưới dạng svgs.

NPM

npm install lottie-web

Bower

bower install lottie-web

3. Cách dùng

Gọi lottie.loadAnimation() để bắt đầu hoạt ảnh. Nó nhận một đối tượng làm tham số duy nhất với:

  • animationData: một Đối tượng với dữ liệu hoạt ảnh đã xuất.
  • path: đường dẫn tương đối đến đối tượng hoạt hình. (animationData và đường dẫn loại trừ lẫn nhau)
  • loop: true / false / number
  • autoplay: true / false nó sẽ bắt đầu phát ngay khi nó sẵn sàng
  • name: tên hoạt hình để tham khảo trong tương lai
  • renderer: 'svg' / 'canvas' / 'html' để đặt trình kết xuất
  • container: phần tử dom để hiển thị hoạt ảnh

Nó trả về phiên bản hoạt ảnh mà bạn có thể kiểm soát bằng play, pause, setSpeed, v.v.

lottie.loadAnimation({
  container: element, // the dom element that will contain the animation
  renderer: 'svg',
  loop: true,
  autoplay: true,
  path: 'data.json' // the path to the animation json
});

Các trường hợp hoạt ảnh có các phương thức chính sau:

  • anim.play()
  • anim.stop()
  • anim.pause()
  • anim.setLocationHref(locationHref) -- một tham số thường được truyền dưới dạng location.href. Nó hữu ích khi bạn gặp sự cố trong safari nơi url của bạn không có #.
  • anim.setSpeed(speed) -- một tham số (1 là tốc độ bình thường)
  • anim.goToAndStop(value, isFrame) param đầu tiên là một giá trị số. tham số thứ hai là một boolean xác định thời gian hoặc khung cho tham số đầu tiên
  • anim.goToAndPlay(value, isFrame) param đầu tiên là một giá trị số. tham số thứ hai là một boolean xác định thời gian hoặc khung cho tham số đầu tiên
  • anim.setDirection(direction) -- một tham số direction (1 là direction bình thường.)
  • anim.playSegments(segments, forceFlag) -- tham số đầu tiên là một mảng đơn hoặc nhiều mảng có hai giá trị mỗi mảng (fromFrame, toFrame), tham số thứ hai là boolean để buộc phân đoạn mới ngay lập tức
  • anim.setSubframe(flag) -- Nếu false, nó sẽ để nguyên original AE fps. Nếu đúng, nó sẽ cập nhật nhiều nhất có thể. (đúng theo mặc định
  • anim.destroy()

lottie có 8 method chính:

  • lottie.play() -- với option name để nhắm target với một hoạt ảnh cụ thể
  • lottie.stop() -- với option name để nhắm target với một hoạt ảnh cụ thể
  • lottie.setSpeed() -- tốc độ tham số đầu tiên (1 là tốc độ bình thường) - với option name để nhắm mục tiêu một hoạt ảnh cụ thể
  • lottie.setDirection() -- tham số directino đầu tiên (1 là direction bình thường.) - với option name để nhắm mục tiêu một hoạt ảnh cụ thể
  • lottie.searchAnimations() -- tìm kiếm các phần tử có lớp "lottie"
  • lottie.loadAnimation() -- Đã giải thích ở trên. trả về một instance hoạt ảnh để điều khiển riêng lẻ.
  • lottie.destroy() -- Để xóa và giải phóng tài nguyên. DOM được làm trống
  • lottie.registerAnimation()-- bạn có thể đăng ký một phần tử trực tiếp với registerAnimation. Nó phải có thuộc tính "data-animation-path" trỏ đến url data.json
  • lottie.setQuality() -- mặc định 'high', đặt 'high', ' medium', 'low' hoặc một số > 1 để cải thiện hiệu suất trình phát. Trong một số hoạt ảnh thấp nhất là 2 sẽ không hiển thị bất kỳ sự khác biệt nào.

4. Event

  • onComplete
  • onLoopComplete
  • onEnterFrame
  • onSegmentStart

Bạn cũng có thể sử dụng addEventListener với các sự kiện sau:

  • complete
  • loopComplete
  • enterFrame
  • segmentStart
  • config_ready (when initial config is done)
  • data_ready (when all parts of the animation have been loaded)
  • DOMLoaded (when elements have been added to the DOM)
  • destroy

Các tùy chọn khác

Nếu bạn muốn sử dụng canvas hiện có để vẽ, bạn có thể chuyển một đối tượng bổ sung: 'render' với cấu hình sau:
lottie.loadAnimation({
container: element, // the dom element
renderer: 'svg',
loop: true,
autoplay: true,
animationData: animationData, // the animation data
rendererSettings: {
  context: canvasContext, // the canvas context
  scaleMode: 'noScale',
  clearCanvas: false,
  progressiveLoad: false, // Boolean, only svg renderer, loads dom elements when needed. Might speed up initialization for large number of elements.
  hideOnTransparent: true //Boolean, only svg renderer, hides elements when opacity reaches 0 (defaults to true)
}
});

Nếu như này, bạn sẽ phải xử lý việc xóa canvas sau mỗi frame nha

Một cách khác để tải hoạt ảnh là thêm các thuộc tính cụ thể vào một phần tử dom. Bạn phải bao gồm một div và đặt lớp của nó thành lottie. Nếu bạn làm điều đó trước khi tải trang, nó sẽ tự động tìm kiếm tất cả các thẻ có lớp "lottie". Hoặc bạn có thể gọi lottie.searchAnimations() sau khi tải trang và nó sẽ tìm kiếm tất cả các phần tử có lớp là "lottie".

  • thêm data.json vào một thư mục liên quan đến html
  • tạo một div chứa hoạt ảnh.

Cần thiết

  • một lớp học được gọi là "lottie"
  • thuộc tính "data-animation-path" với đường dẫn tương đối đến data.json

Không bắt buộc

  • thuộc tính "data-anim-loop"
  • thuộc tính "data-name" để chỉ định tên để nhắm mục tiêu các điều khiển chơi cụ thể

Thí dụ

<div style="width:1067px;height:600px" class="lottie" data-animation-path="animation/" data-anim-loop="true" data-name="ninja"></div>

source: https://airbnb.io/lottie/#/web?id=usage


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí