Keyboard Lock API ile daha iyi tam ekran modu

Tam ekran modunda Escape tuşunu yakalamak için Klavye Kilidi API'sini kullanın.

Daha önce oyun içinde bir diyalog penceresi açıp Escape tuşuyla içgüdüsel olarak iptal ettiğiniz bir tam ekran web oyunu oynadıysanız muhtemelen kendinizi tam ekran modundan çıkarmışsınızdır. Bu sinir bozucu deneyim, iletişim kutusu ve tam ekran modunun Escape tuşu için "kavga" olmasından kaynaklanmaktadır. Bu her zaman eşit değildir çünkü varsayılan olarak tam ekran modu her zaman kazanır. Peki iletişim kutusunu Escape tuşu için daha başarılı hale nasıl getirebilirsiniz? Klavye Kilidi API'si burada devreye girer.

Tam ekran modundan çıkmak için Escape tuşuna basın.

Tarayıcı desteği

Tarayıcı Desteği

  • 68
  • 79
  • x
  • x

Kaynak

Klavye Kilidi API'sini kullanma

Klavye Kilidi API'si navigator.keyboard. üzerinde kullanılabilir Keyboard arayüzünün lock() yöntemi, fiziksel klavyedeki tuşların herhangi biri veya tümü için tuşların yakalanmasını etkinleştirdikten sonra bir söz döndürür. Bu yöntem yalnızca temel işletim sistemi tarafından erişim izni verilen anahtarları yakalayabilir. Neyse ki Escape tuşu bunlardan biridir.

Uygulamanızda tam ekran modu varsa tam ekran isteğinde bulunurken Escape tuşunu yakalayarak Klavye Kilidi API'sini aşamalı bir iyileştirme olarak kullanın. Keyboard arayüzünün unlock() yöntemini kullanarak tam ekran modundan çıkarken klavyenin kilidini açın (yani artık yakalamayın).

// 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.');
  });
}

Bu, kullanıcı tam ekran modundayken Escape tuşuna basıldığında, iletişim kutusunun varsayılan olarak iptal edileceği anlamına gelir. Kullanıcı, Escape tuşuna basıp basılırsa tam ekran modundan yine çıkabilir. İki özelliğin de en iyisi.

Tam ekran modundan çıkmak için Escape tuşunu basılı tutun.

Demo

Hem varsayılan hem de aşamalı olarak geliştirilmiş varyantları demoda test edebilirsiniz. Demonun kaynak kodu her iki davranışı da göstermesi gerektiği için önceki snippet'e göre daha az temizdir.

Daha iyi tam ekran modu demosu.

Uygulamada

Bu progresif geliştirmeyi pratikte kullanmak için önceki snippet'i kopyalamanız yeterlidir. Mevcut tam ekran koduyla bile hiçbir değişiklik gerektirmeden çalışacak şekilde tasarlanmıştır. Örnek olarak Freeciv adlı oyunun PR'sini inceleyebilirsiniz. PR birleştirildikten sonra Escape tuşuna basarak tüm oyun içi iletişim kutularını iptal edebilirsiniz.

Freeciv oyununa klavye kilidi ekleyen GitHub pull isteği.

Bonus bir yer işareti uygulaması

Tam ekran modunu destekleyen her uygulama veya oyun açık kaynaklı olmaz veya yamalarınızı kabul etmez. Daha iyi tam ekran modunu etkinleştirmek için aşağıdaki yer işareti uygulaması yer işaretleri çubuğunuza eklenebilir ve tıklanabilir.