การเคลื่อนที่ระหว่างมุมมอง

เรียนรู้วิธีสร้างภาพเคลื่อนไหวระหว่าง 2 มุมมองในแอปของคุณ

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

  • ใช้คําแปลเพื่อย้ายไปมาระหว่างมุมมอง หลีกเลี่ยงการใช้ left, top หรือพร็อพเพอร์ตี้อื่นๆ ที่ทำให้เลย์เอาต์แสดงขึ้น
  • ตรวจสอบว่าภาพเคลื่อนไหวที่ใช้สั้นกระชับและมีระยะเวลาสั้นๆ
  • ลองพิจารณาว่าภาพเคลื่อนไหวและเลย์เอาต์ของคุณเปลี่ยนแปลงไปอย่างไรเมื่อหน้าจอมีขนาดเพิ่มขึ้น สิ่งที่เหมาะกับหน้าจอขนาดเล็กอาจดูแปลกๆ เมื่อใช้ในบริบทของเดสก์ท็อป

ลักษณะและลักษณะการทำงานของการเปลี่ยนมุมมองเหล่านี้จะขึ้นอยู่กับประเภทของข้อมูลพร็อพเพอร์ตี้ที่คุณกำลังจัดการ ตัวอย่างเช่น การสร้างภาพเคลื่อนไหวการวางซ้อนแบบโมดัลที่ด้านบนของมุมมองควรเป็นคนละประสบการณ์กับการเปลี่ยนไปมาระหว่างมุมมองแบบรายการและมุมมองรายละเอียด

ใช้คำแปลเพื่อเปลี่ยนมุมมอง

กำลังแปลระหว่าง 2 มุมมอง

เพื่อช่วยให้ชีวิตง่ายขึ้น ให้สมมติว่ามี 2 มุมมอง คือ มุมมองรายการและมุมมองรายละเอียด เมื่อผู้ใช้แตะรายการในมุมมองรายการ มุมมองรายละเอียดจะเลื่อนเข้ามา และมุมมองรายการจะเลื่อนออก

ดูลำดับชั้น

คุณต้องมีคอนเทนเนอร์สําหรับข้อมูลพร็อพเพอร์ตี้ทั้ง 2 รายการที่ตั้งค่าไว้ overflow: hidden เพื่อให้ได้ผลลัพธ์นี้ ด้วยวิธีนี้ ทั้ง 2 มุมมองสามารถอยู่ในคอนเทนเนอร์ควบคู่กันได้โดยไม่ต้องแสดงแถบเลื่อนแนวนอน และแต่ละมุมมองสามารถเลื่อนแบบด้านหนึ่งไปยังอีกด้านหนึ่งภายในคอนเทนเนอร์ได้ตามต้องการ

CSS สำหรับคอนเทนเนอร์คือ

.container {
  width: 100%;
  height: 100%;
  overflow: hidden;
  position: relative;
}

ตั้งตำแหน่งของคอนเทนเนอร์เป็น relative ซึ่งหมายความว่าแต่ละมุมมองภายในนั้นสามารถจัดตำแหน่งให้อยู่ด้านบนซ้าย แล้วย้ายไปรอบๆ พร้อมการแปลง วิธีนี้มีประสิทธิภาพดีกว่าการใช้พร็อพเพอร์ตี้ left (เพราะจะทริกเกอร์เลย์เอาต์และสี) และโดยทั่วไปจะหาเหตุผลได้ง่ายกว่า

.view {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;

  /* let the browser know we plan to animate
     each view in and out */
  will-change: transform;
}

การเพิ่ม transition ในพร็อพเพอร์ตี้ transform จะทำให้ได้เอฟเฟกต์สไลด์ที่ดูดี โดยใช้เส้นโค้ง cubic-bezier ที่กำหนดเองซึ่งเราได้อธิบายไว้ในคำแนะนำการค่อยๆ เปลี่ยนที่กำหนดเองเพื่อให้ความรู้สึกสบายตา

.view {
  transition: transform 0.3s cubic-bezier(0.465, 0.183, 0.153, 0.946);
}

มุมมองที่อยู่นอกหน้าจอควรแปลไปทางขวา ดังนั้นในกรณีดังกล่าว ต้องย้ายมุมมองรายละเอียดดังนี้

.details-view {
  transform: translateX(100%);
}

ในตอนนี้จำเป็นต้องใช้ JavaScript จำนวนเล็กน้อยเพื่อจัดการกับชั้นเรียน การดำเนินการนี้จะสลับชั้นเรียนที่เหมาะสมกับมุมมอง

var container = document.querySelector('.container');
var backButton = document.querySelector('.back-button');
var listItems = document.querySelectorAll('.list-item');

/**
    * Toggles the class on the container so that
    * we choose the correct view.
    */
function onViewChange(evt) {
    container.classList.toggle('view-change');
}

// When you click a list item, bring on the details view.
for (var i = 0; i < listItems.length; i++) {
    listItems[i].addEventListener('click', onViewChange, false);
}

// And switch it back again when you click the back button
backButton.addEventListener('click', onViewChange);

สุดท้าย เราจะเพิ่มการประกาศ CSS สำหรับคลาสเหล่านั้น

.view-change .list-view {
  transform: translateX(-100%);
}

.view-change .details-view {
  transform: translateX(0);
}

ลองใช้

คุณสามารถขยายมุมมองนี้ให้ครอบคลุมหลายมุมมอง และแนวคิดพื้นฐานควรจะยังคงเหมือนเดิม มุมมองที่มองไม่เห็นแต่ละมุมมองควรอยู่ออกนอกหน้าจอและนำเข้ามาตามความจำเป็น และมุมมองบนหน้าจอที่กำลังอยู่ควรจะถูกปิดไป

นอกเหนือจากการเปลี่ยนระหว่างมุมมองแล้ว เทคนิคนี้ยังสามารถใช้ได้กับองค์ประกอบแบบเลื่อนเข้าอื่นๆ เช่น องค์ประกอบการนำทางที่แถบด้านข้าง ความแตกต่างที่แท้จริงเพียงอย่างเดียวคือคุณไม่จำเป็นต้องเปลี่ยนมุมมองอื่นๆ

ตรวจสอบว่าภาพเคลื่อนไหวใช้งานได้กับหน้าจอขนาดใหญ่

ดูลำดับชั้นบนหน้าจอขนาดใหญ่

สำหรับหน้าจอขนาดใหญ่ คุณควรวางมุมมองรายการไว้ตลอดเวลาแทนที่จะนำออก และเลื่อนมุมมองรายละเอียดจากทางด้านขวา คล้ายกับการจัดการมุมมองการนำทาง