โหมดเต็มหน้าจอที่ดีขึ้นด้วย Keyboard Lock API

ใช้ API การล็อกแป้นพิมพ์เพื่อบันทึกแป้น Escape ในโหมดเต็มหน้าจอ

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

กดปุ่ม Escape เพื่อออกจากโหมดเต็มหน้าจอ

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

การรองรับเบราว์เซอร์

  • 68
  • 79
  • x
  • x

แหล่งที่มา

ใช้ API การล็อกแป้นพิมพ์

Keyboard Lock API มีอยู่ใน navigator.keyboard. เมธอด lock() ของอินเทอร์เฟซ Keyboard จะแสดงผลสัญญาหลังจากเปิดใช้การจับการกดแป้นบางแป้นหรือแป้นทั้งหมดบนแป้นพิมพ์จริง วิธีนี้จะบันทึกได้เฉพาะคีย์ที่ให้สิทธิ์เข้าถึงโดยระบบปฏิบัติการที่สำคัญ โชคดีที่แป้น Escape เป็นหนึ่งในนั้น

หากแอปมีโหมดเต็มหน้าจอ ให้ใช้ Keyboard Lock API เป็นการเพิ่มประสิทธิภาพแบบต่อเนื่องโดยการบันทึกแป้น Escape เมื่อขอโหมดเต็มหน้าจอ ปลดล็อก (ซึ่งก็คือไม่จับภาพอีกต่อไป) แป้นพิมพ์เมื่อออกจากโหมดเต็มหน้าจอโดยใช้เมธอด unlock() ของอินเทอร์เฟซ Keyboard

// Feature detection.
const supportsKeyboardLock =
    ('keyboard' in navigator) && ('lock' in navigator.keyboard);

if (supportsKeyboardLock) {
  document.addEventListener('fullscreenchange', async () => {
    if (document.fullscreenElement) {
      // The magic happens here… 🦄
      await navigator.keyboard.lock(['Escape']);
      console.log('Keyboard locked.');
      return;
    }
    navigator.keyboard.unlock();
    console.log('Keyboard unlocked.');
  });
}

ซึ่งหมายความว่าเมื่อผู้ใช้อยู่ในโหมดเต็มหน้าจอ การกด Escape จะเป็นการยกเลิกกล่องโต้ตอบโดยค่าเริ่มต้น หากผู้ใช้กดแป้น ค้างไว้ แป้น Escape ผู้ใช้จะยังออกจากโหมดเต็มหน้าจอได้ ยอดเยี่ยมสุดๆ จากทั้ง 2 ประเทศ

กดปุ่ม Escape ค้างไว้เพื่อออกจากโหมดเต็มหน้าจอ

ข้อมูลประชากร

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

การสาธิตโหมดเต็มหน้าจอที่ดียิ่งขึ้น

ใช้งานได้จริง

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

คำขอดึง GitHub ที่เพิ่มการล็อกแป้นพิมพ์ให้กับเกม Freeciv

บุ๊กมาร์กเล็ตโบนัส

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