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

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

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

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

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

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

API อุปกรณ์

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

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

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

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

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

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

CSS

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

ค่าของฟีเจอร์ 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 ส่วน (คอลัมน์ 1 และ 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 DevTools และสลับไปมาระหว่าง ต่อเนื่องและพับ คุณสามารถดูรูปบานพับได้เมื่อ ที่เกี่ยวข้อง

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