ระบุวิธีผสมระหว่างเอฟเฟกต์ภาพเคลื่อนไหวหลายรายการกับการกำหนดองค์ประกอบภาพเคลื่อนไหว

แทนที่ เพิ่ม หรือสะสม และนั่นคือคำถาม

การรวมเอฟเฟกต์ภาพเคลื่อนไหวหลายรายการ

พร็อพเพอร์ตี้ animation-composition ช่วยให้คุณควบคุมสิ่งที่ควรจะเกิดขึ้นเมื่อภาพเคลื่อนไหวหลายรายการส่งผลต่อคุณสมบัติเดียวกันพร้อมกันได้

การสนับสนุนเบราว์เซอร์

  • 112
  • 112
  • 115
  • 16

แหล่งที่มา

สมมติว่าคุณมีการแปลงฐานนี้กับองค์ประกอบ

transform-origin: 50% 50%;
transform: translateX(50px) rotate(45deg);

และคุณยังมีชุดคีย์เฟรมนี้อีกด้วย

@keyframes adjust {
  to {
    transform: translateX(100px);
  }
}

เมื่อใช้คีย์เฟรมเหล่านี้กับองค์ประกอบ transform ในคีย์เฟรม to จะแทนที่ transform ที่มีอยู่ นี่คือลักษณะการทำงานเริ่มต้น

เมื่อใช้ animation-composition คุณจะควบคุมสิ่งที่ควรเกิดขึ้นแทน replace ตามค่าเริ่มต้นได้ ค่าที่ยอมรับมีดังนี้

  • replace: ค่าเอฟเฟกต์จะแทนที่ค่าที่เกี่ยวข้อง (ค่าเริ่มต้น)
  • add: เพิ่มค่าเอฟเฟกต์ลงในค่าที่เกี่ยวข้อง
  • accumulate: ค่าเอฟเฟกต์จะรวมเข้ากับค่าที่เกี่ยวข้อง

ความแตกต่างระหว่างการบวกและการสะสมมีความแตกต่างกันเล็กน้อย ตัวอย่างเช่น ลองนำ 2 ค่านี้ออกคือ blur(2) และ blur(3) เมื่อนำมารวมกันจะทำให้เกิด blur(2) blur(3) แต่เมื่อสะสมจำนวนนี้จะทำให้เกิด blur(5)

คุณเปรียบเทียบสิ่งนี้กับถ้วยที่ใส่ชาได้ สิ่งที่จะเกิดขึ้นเมื่อเทนมลงไป

  • replace: นำชาออก แล้วแทนที่ด้วยนม
  • add: นมจะใส่นมลงไปในถ้วย แต่จะยังวางชั้นบนของชาอยู่
  • accumulate: นมที่เติมลงในชาเป็นของเหลวและนมผสมเข้มข้นกันอย่างลงตัว

เดโม

ในการสาธิตด้านล่างมีช่องสีเทา 3 กล่องที่มีฐาน transform และ animation กำกับอยู่

แม้ว่าช่องเหล่านี้จะมีภาพเคลื่อนไหวเดียวกัน แต่ให้ผลลัพธ์ที่ต่างกันเนื่องจากมีชุด animation-composition ที่ต่างกัน:

ช่องแรกตั้งค่าเป็น animation-composition: replace นี่คือลักษณะการทำงานเริ่มต้น ในตำแหน่งสิ้นสุด ค่า translateX(50px) rotate(45deg) เดิมสำหรับ transform จะถูกแทนที่ด้วย translateX(100px)

ช่องที่ 2 ตั้งค่าเป็น animation-composition: add ในตำแหน่งสิ้นสุด ระบบจะเพิ่ม translateX(100px) ไปยัง translateX(50px) rotate(45deg) เดิม ซึ่งส่งผลให้เป็น translateX(50px) rotate(45deg) translateX(100px) การดำเนินการนี้จะย้ายกล่องไป 50 พิกเซล แล้วหมุนกล่อง 45 องศา แล้วเลื่อนกล่องไป 100 พิกเซล

ช่องที่ 3 ตั้งค่าเป็น animation-composition: accumulate ในตำแหน่งสิ้นสุด ระบบจะเพิ่ม translateX(100px) ทางคณิตศาสตร์ลงใน translateX(50px) จากการเปลี่ยนรูปแบบเดิม ซึ่งทําให้เกิดการเปลี่ยนรูปแบบ translateX(150px) rotate(45deg)

รูปภาพโดย Alex Boyd ใน Unsplash