ช่วงทดลองใช้จากต้นทางสำหรับ API แบบพับได้

Chrome กำลังทดลองใช้ API จำนวน 2 รายการ ได้แก่ Device Posture API และ Viewport Audiences Enumeration API ซึ่งมีให้บริการเป็นช่วงทดลองใช้จากต้นทางจาก Chrome 125 ซึ่งเรียกรวมกันว่า API แบบพับได้ซึ่งออกแบบมาเพื่อช่วยนักพัฒนาแอปกำหนดเป้าหมายอุปกรณ์แบบพับได้ โพสต์นี้จะแนะนำ API เหล่านี้และให้ข้อมูลเกี่ยวกับวิธีเริ่มทดสอบ

อุปกรณ์จะมีรูปแบบของอุปกรณ์ที่แตกต่างกัน 2 รูปแบบโดยส่วนใหญ่ ได้แก่ อุปกรณ์ที่มีหน้าจอที่ยืดหยุ่นเพียงหน้าจอเดียว (อย่างราบรื่น) และอุปกรณ์ที่มี 2 หน้าจอ (มีตะเข็บ หรือที่เรียกว่าอุปกรณ์ Dual Screen)

สคีมาภาพวาดของอุปกรณ์ที่มีหน้าจอที่ยืดหยุ่นเพียงหน้าจอเดียว (อย่างราบรื่น) ทางด้านซ้าย และอุปกรณ์ที่มี 2 หน้าจอ (มีรอยต่อหรือที่เรียกว่า Dual Screen) ทางด้านขวา

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

โดย API ใหม่เหล่านี้ช่วยให้นักพัฒนาซอฟต์แวร์มีวิธีมอบประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้นสำหรับอุปกรณ์เหล่านี้ โดย API แต่ละรายการจะแสดงข้อมูลพื้นฐานของแพลตฟอร์มเว็บที่จำเป็นแบบ 2 ทาง นั่นคือผ่าน CSS และ JavaScript

API อุปกรณ์

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

อุปกรณ์มีลักษณะ 2 ระดับดังนี้

  • folded: ระดับการใช้งานของแล็ปท็อปหรือหนังสือ

การวาดภาพอุปกรณ์ให้อยู่ในแนวราบหรือแท็บเล็ต และจอแสดงผลแบบโค้งที่ราบรื่น

  • continuous: จอแบน แท็บเล็ต หรือแม้กระทั่งจอโค้งที่ราบรื่น

การวาดรูปแบบของอุปกรณ์ในแล็ปท็อปหรือหนังสือ

CSS

ข้อกำหนดของ Device Posture API จะกำหนดฟีเจอร์สื่อใหม่ของ CSS ซึ่งก็คือ device-posture ฟีเจอร์สื่อนี้แก้ไขเป็นท่าตายตัว รูปแบบเหล่านี้ประกอบด้วยค่าที่กำหนดไว้ล่วงหน้าจำนวนหนึ่งซึ่งแต่ละค่าครอบคลุมสถานะทางกายภาพของอุปกรณ์

ค่าของฟีเจอร์ device-posture ตรงกับคำอธิบายก่อนหน้าของลักษณะที่เป็นไปได้ ดังนี้

  • folded
  • continuous

อาจมีการเพิ่มระดับใหม่ในอนาคตหากมีอุปกรณ์ใหม่เข้ามาในตลาด

ตัวอย่าง

/* Using the device in a 'book' posture. */
@media (device-posture: folded) { ... }

/* Using the device in a 'flat' posture, or any typical device like a laptop or
desktop device. */
@media (device-posture: continuous) { ... }

JavaScript

หากต้องการค้นหาท่าทางของอุปกรณ์ วัตถุ DevicePosture ใหม่ก็จะพร้อมใช้งาน

const { type } = navigator.devicePosture;
console.log(`The current device is of type ${type}.`);

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

navigator.devicePosture.addEventListener('change', (e) => {
  console.log(`The device posture changed to type ${e.type}`);
});

API กลุ่มวิวพอร์ต

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

CSS

จำนวนของส่วนเชิงตรรกะจะแสดงผ่านฟีเจอร์สื่อใหม่ 2 รายการ ซึ่งกำหนดไว้ในข้อกำหนด CSS Media Query ระดับ 5 นั่นคือ vertical-viewport-segments และ horizontal-viewport-segments แก้ไขเป็นจำนวนกลุ่มที่แบ่งวิวพอร์ตออก

นอกจากนี้ยังมีการเพิ่มตัวแปรสภาพแวดล้อมใหม่ในการค้นหามิติข้อมูลของแผนกเชิงตรรกะแต่ละส่วน ตัวแปรเหล่านี้ได้แก่

  • env(viewport-segment-width x y)
  • env(viewport-segment-height x y)
  • env(viewport-segment-top x y)
  • env(viewport-segment-left x y)
  • env(viewport-segment-bottom x y)
  • env(viewport-segment-right x y)

ตัวแปรแต่ละรายการมีมิติข้อมูล 2 รายการ ซึ่งจะแสดงตำแหน่ง x และ y ตามลำดับในตาราง 2 มิติที่สร้างโดยคุณลักษณะของฮาร์ดแวร์ที่แยกกลุ่มต่างๆ

แผนภาพแสดงส่วนแนวตั้งและแนวนอน ส่วนแรกในแนวนอนคือ x 0 และ y 0 ส่วนที่สอง x 1 และ y 0 กลุ่มแนวตั้งแรกคือ x 0 และ y 0 ส่วนที่สอง x 0 และ y 1
ส่วนแรกแนวนอนคือ x 0 และ y 0 ส่วนที่สอง x 1 และ y 0 กลุ่มแนวตั้งแรกคือ x 0 และ y 0 ส่วนที่สอง x 0 และ y 1

ข้อมูลโค้ดต่อไปนี้เป็นตัวอย่างง่ายๆ ของการสร้าง UX แบบแยก ซึ่งเรามีส่วนเนื้อหา 2 ส่วน (col1 และ col2) ในแต่ละฝั่งของส่วนพับ

<style>
  /* Segments are laid out horizontally. */
  @media (horizontal-viewport-segments: 2) {
    #segment-css-container {
      flex-direction: row;
    }

    #col1 {
      display: flex;
      flex: 0 0 env(viewport-segment-right 0 0);
      background-color: steelblue;
    }

    #fold {
      width: calc(env(viewport-segment-left 1 0) - env(viewport-segment-right 0 0));
      background-color: black;
      height: 100%;
    }

    #col2 {
      display: flex;
      background-color: green;
    }
  }

  /* Segments are laid out vertically. */
  @media (vertical-viewport-segments: 2) {
    #segment-css-container {
      flex-direction: column;
    }

    #col1 {
      display: flex;
      flex: 0 0 env(viewport-segment-bottom 0 0);
      background-color: pink;
    }

    #fold {
      width: 100%;
      height: calc(env(viewport-segment-top 0 1) - env(viewport-segment-bottom 0 0));
      background-color: black;
    }

    #col2 {
      display: flex;
     background-color: seagreen;
    }
  }
</style>

<div id="segment-css-container">
   <div id="col1"></div>
   <div id="fold"></div>
   <div id="col2"></div>
 </div>

รูปภาพต่อไปนี้จะแสดงลักษณะของประสบการณ์การใช้งานบนอุปกรณ์จริง

โทรศัพท์แบบพับได้ในรูปของหนังสือแนวตั้ง

โทรศัพท์แบบพับได้ในแท่นหนังสือแนวนอน

แท็บเล็ตแบบพับได้ในแท่นหนังสือแนวนอน

JavaScript

หากต้องการดูจำนวนกลุ่มวิวพอร์ต ให้ตรวจสอบรายการ segments ใน visualViewport

const segments = window.visualViewport.segments;
console.log('The viewport has the following segments:', segments);

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

ลองใช้ API แบบพับได้

API แบบพับได้มีให้ใช้งานในช่วงทดลองใช้จากต้นทางตั้งแต่ Chrome 125 ถึง Chrome 128 ดูข้อมูลเบื้องหลังเกี่ยวกับช่วงทดลองใช้จากต้นทางได้ที่เริ่มต้นใช้งานช่วงทดลองใช้จากต้นทาง

สำหรับการทดสอบในพื้นที่ คุณจะเปิดใช้ API แบบพับได้พร้อมแฟล็กฟีเจอร์แพลตฟอร์มเว็บแบบทดลองที่ chrome://flags/#enable-experimental-web-platform-features ซึ่งยังเปิดใช้ได้โดยเรียกใช้ Chrome จากบรรทัดคำสั่งด้วย --enable-experimental-web-platform-features

เดโม

หากต้องการดูการสาธิต โปรดดูที่เก็บการสาธิต หากคุณไม่มีอุปกรณ์จริงที่จะทดสอบ คุณสามารถเลือกอุปกรณ์จำลอง Galaxy Z Fold 5 หรือ Asus Zenbook Fold ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome และสลับระหว่าง Galaxy Z Fold 5 หรือ Folded นอกจากนี้คุณยังแสดงภาพบานพับได้ หากมี

เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ที่จำลองอุปกรณ์แบบพับได้