वेब ऐप्लिकेशन अब पॉइंटर इवेंट कैप्चर करते समय, माउस की रफ़्तार बढ़ाने की सुविधा बंद कर सकते हैं.
तेज़ी से मूवमेंट करने की सुविधा, माउस या ट्रैकपैड का इस्तेमाल करके स्क्रीन पर पॉइंटर को घुमाने के लिए एक एर्गोनॉमिक सुविधा है. इससे धीरे-धीरे कर्सर को सटीक तरीके से घुमाया जा सकता है. साथ ही, इससे कर्सर को तेज़ी से घुमाकर पूरी स्क्रीन पर ले जाया जा सकता है. खास तौर पर, माउस को जितनी दूरी तक मूव किया जाता है, स्क्रीन पर पॉइंटर उतनी ही दूरी तक मूव होता है. हालांकि, अगर माउस को तेज़ी से मूव किया जाता है, तो स्क्रीन पर पॉइंटर ज़्यादा दूरी तक मूव होता है.
ऑपरेटिंग सिस्टम, माउस की रफ़्तार बढ़ाने की सुविधा को डिफ़ॉल्ट रूप से चालू रखते हैं. कुछ पहले पक्ष (ग्राहक) के नज़रिए से खेले जाने वाले गेम, जैसे कि फ़र्स्ट-पर्सन शूटर (एफ़पीएस) गेम में, माउस के इनपुट के रॉ डेटा का इस्तेमाल किया जाता है. इससे ऐक्सलरेशन में बदलाव किए बिना, कैमरे को घुमाया जा सकता है. एक ही तरह की शारीरिक गतिविधि से, चाहे वह धीरे हो या तेज़, एक जैसा रोटेशन होता है. इससे गेमिंग का बेहतर अनुभव मिलता है. साथ ही, पेशेवर गेमरों के मुताबिक, यह ज़्यादा सटीक होता है.

Chrome 88 से, वेब ऐप्लिकेशन अपडेट किए गए पॉइंटर लॉक एपीआई की मदद से, माउस के तेज़ी से और सामान्य तरीके से किए गए मूवमेंट के डेटा के बीच स्विच कर सकते हैं.
वेब पर आधारित गेमिंग प्लैटफ़ॉर्म, जैसे कि Google Stadia और Nvidia GeForce Now, पहले से ही इन नई सुविधाओं का इस्तेमाल कर रहे हैं, ताकि एफ़पीएस गेम खेलने वालों को बेहतर अनुभव दिया जा सके.
एपीआई का इस्तेमाल करना
पॉइंटर लॉक करने का अनुरोध करना
पॉइंटर लॉक, डेस्कटॉप ऐप्लिकेशन के लिए इस्तेमाल किया जाने वाला एक स्टैंडर्ड शब्द है.इसका मतलब है कि जब कोई डेस्कटॉप ऐप्लिकेशन, पॉइंटर आइकॉन को छिपा देता है और माउस की गतिविधि को किसी अन्य काम के लिए इस्तेमाल करता है. उदाहरण के लिए, 3D दुनिया में चारों ओर देखना.
mousemove
दस्तावेज़ इवेंट के movementX
और movementY
एट्रिब्यूट से पता चलता है कि माउस पॉइंटर, आखिरी बार मूव किए जाने के बाद से अब तक कितना मूव हुआ है. हालांकि,
जब पॉइंटर वेब पेज से बाहर चला जाता है, तब ये अपडेट नहीं होते.
document.addEventListener("mousemove", (event) => {
console.log(`movementX: ${event.movementX} movementY: ${event.movementY}`);
});
माउस पॉइंटर को कैप्चर करने या पॉइंटर लॉक करने का अनुरोध करने से, आपको अब पॉइंटर के बाहर जाने की चिंता नहीं करनी पड़ती. यह सुविधा खास तौर पर इमर्सिव वेब गेम के लिए मददगार है. जब पॉइंटर लॉक होता है, तो सभी माउस इवेंट, पॉइंटर लॉक के टारगेट एलिमेंट पर जाते हैं.
पॉइंटर लॉक करने का अनुरोध करने के लिए, टारगेट एलिमेंट पर requestPointerLock()
को कॉल करें. साथ ही, पॉइंटर लॉक में होने वाले बदलावों पर नज़र रखने के लिए, pointerlockchange
और pointerlockerror
इवेंट सुनें.
const myTargetElement = document.body;
// Call this function to request a pointer lock.
function requestPointerLock() {
myTargetElement.requestPointerLock();
}
document.addEventListener("pointerlockchange", () => {
if (document.pointerLockElement) {
console.log(`pointer is locked on ${document.pointerLockElement}`);
} else {
console.log("pointer is unlocked");
}
});
document.addEventListener("pointerlockerror", () => {
console.log("pointer lock error");
});
माउस की रफ़्तार बढ़ाने की सुविधा बंद करें
माउस की रफ़्तार बढ़ाने की सुविधा के लिए ओएस-लेवल पर किए जाने वाले बदलाव को बंद करने और माउस के रॉ इनपुट को ऐक्सेस करने के लिए, { unadjustedMovement: true }
के साथ requestPointerLock()
को कॉल करें.
इस तरह, पॉइंटर लॉक होने पर mousemove
इवेंट से मिले माउस मूवमेंट डेटा में माउस ऐक्सलरेशन शामिल नहीं होगा.
अनुरोध पूरा हुआ या नहीं, यह जानने के लिए requestPointerLock()
से मिले नए प्रॉमिस का इस्तेमाल करें.
function requestPointerLockWithUnadjustedMovement() {
const promise = myTargetElement.requestPointerLock({
unadjustedMovement: true,
});
if (!promise) {
console.log("disabling mouse acceleration is not supported");
return;
}
return promise
.then(() => console.log("pointer is locked"))
.catch((error) => {
if (error.name === "NotSupportedError") {
// Some platforms may not support unadjusted movement.
// You can request again a regular pointer lock.
return myTargetElement.requestPointerLock();
}
});
}
पॉइंटर लॉक को रिलीज़ किए बिना, माउस के तेज़ी से और सामान्य तरीके से हिलने-डुलने से जुड़े डेटा के बीच टॉगल किया जा सकता है. अपनी पसंद के विकल्प के साथ, पॉइंटर लॉक करने का अनुरोध फिर से करें. अगर यह अनुरोध पूरा नहीं होता है, तो ओरिजनल लॉक बना रहेगा और लौटाया गया प्रॉमिस अस्वीकार कर दिया जाएगा. बदलाव के अनुरोध के पूरा न होने पर, पॉइंटर लॉक के कोई भी इवेंट ट्रिगर नहीं होंगे.
ब्राउज़र समर्थन
Pointer Lock API, सभी ब्राउज़र पर अच्छी तरह से काम करता है. हालांकि, अक्टूबर 2020 तक, Chromium पर आधारित ब्राउज़र (जैसे, Chrome, Edge वगैरह) ही ऐसे ब्राउज़र हैं जिनमें माउस ऐक्सेलरेटर के लिए ओएस-लेवल के अडजस्टमेंट को बंद करने की सुविधा है. अपडेट के लिए, MDN की ब्राउज़र के साथ काम करने की सुविधा टेबल देखें.
ऑपरेटिंग सिस्टम सपोर्ट
माउस की स्पीड को ओएस लेवल पर अडजस्ट करने की सुविधा को बंद करने की सुविधा, ChromeOS, macOS Catalina 10.15.1, और Windows पर काम करती है. इसके बाद, Linux को बंद करें.
नमूना
सैंपल चलाकर, Pointer Lock API का इस्तेमाल किया जा सकता है.
मददगार लिंक
- ज़्यादा जानकारी
- खासियत के बारे में पीआर
- GitHub रिपॉज़िटरी
- ChromeStatus एंट्री
- Chrome ट्रैकिंग बग
- शिपिंग का इरादा
- Mozilla की स्थिति
- WebKit की पोज़िशन
Acknowledgements
इस लेख की समीक्षा करने के लिए, जेम्स हॉलियर, थॉमस स्टाइनर, जो मेडली, केसी बास्क, और विंसेंट शेइब का धन्यवाद.