İken cursor: noneCSS çözüm sağlam ve kolay kesinlikle geçici çözüm gerçek hedefi için ise, kaldırmak web uygulaması kullanılırken varsayılan imleç ya da uygulamak kendi ham fare hareketi yorumlanması (örneğin FPS oyunlar için), olabilir bunun yerine Pointer Lock API'yi kullanmayı düşünebilirsiniz .
İmleci kaldırmak için bir öğe üzerinde requestPointerLock'u kullanabilir ve tüm mousemoveolayları o öğeye (işleyebileceğiniz veya yönetemeyeceğiniz) yeniden yönlendirebilirsiniz :
document.body.requestPointerLock();
Kilidi serbest bırakmak için exitPointerLock'u kullanabilirsiniz :
document.exitPointerLock();
Ek Notlar
İmleç yok, gerçek
Bu çok güçlü bir API çağrısıdır. Yalnızca imlecinizi görünmez hale getirmekle kalmaz, aynı zamanda işletim sisteminizin yerel imlecini de kaldırır . İşaretçi kilidi serbest bırakılıncaya kadar ( bazı tarayıcılarda kullanarak veya basarak ) metin seçemez veya farenizle hiçbir şey yapamazsınız (kodunuzdaki bazı fare olaylarını dinlemek dışında ).exitPointerLockESC
Yani, imleç olmadığı için pencereyi imlecinizle bırakamazsınız, tekrar gösterilmesi için.
Kısıtlamalar
Yukarıda belirtildiği gibi, bu çok güçlü bir API çağrısıdır ve bu nedenle yalnızca web üzerindeki bir tıklama gibi bazı doğrudan kullanıcı etkileşimlerine yanıt olarak yapılmasına izin verilir; Örneğin:
document.addEventListener("click", function () {
document.body.requestPointerLock();
});
Ayrıca, izin ayarlanmadıkça requestPointerLockkorumalı alandan iframeçalışmaz allow-pointer-lock.
Kullanıcı bildirimler
Bazı tarayıcılar, kilit devreye girmeden önce kullanıcıdan bir onay ister, bazıları ise sadece bir mesaj görüntüler. Bu, işaretçi kilidinin aramadan hemen sonra etkinleştirilemeyebileceği anlamına gelir. Bununla birlikte, işaretçi kilitlemenin fiili aktivasyonu , çağrılan pointerchangeöğedeki olayı dinleyerek dinlenebilir requestPointerLock:
document.body.addEventListener("pointerlockchange", function () {
if (document.pointerLockElement === document.body) {
// Pointer is now locked to <body>.
}
});
Çoğu tarayıcı mesajı yalnızca bir kez görüntüler, ancak Firefox her aramada mesajı ara sıra spam olarak gönderir. AFAIK, bu yalnızca kullanıcı ayarlarıyla çözülebilir , Firefox'ta işaretçi kilidi bildirimini devre dışı bırakma bölümüne bakın .
Ham fare hareketini dinleme
İşaretçi Kilidi API'si yalnızca fareyi kaldırmakla kalmaz, bunun yerine ham fare hareketi verilerini requestPointerLockçağrılan öğeye yeniden yönlendirir . Bu, yalnızca mousemoveolay kullanılarak ve ardından olay nesnesindeki movementXve movementYözelliklerine erişilerek dinlenebilir :
document.body.addEventListener("mousemove", function (e) {
console.log("Moved by " + e.movementX + ", " + e.movementY);
});