वेब ऐप्लिकेशन अब पॉइंटर इवेंट कैप्चर करते समय, माउस की रफ़्तार बढ़ाने की सुविधा बंद कर सकते हैं.
माउस या ट्रैकपैड का इस्तेमाल करके, स्क्रीन पर कर्सर को तेज़ी से घुमाने की सुविधा को ऐक्सेलरेटेड मूवमेंट कहते हैं. इस मोड में कर्सर को धीरे-धीरे आगे-पीछे किया जा सकता है. साथ ही, कर्सर को तेज़ी से एक बार में पूरी स्क्रीन पर ले जाया जा सकता है. खास तौर पर, माउस को जिस दूरी तक ले जाया जाता है उसी दूरी पर स्क्रीन पर मौजूद पॉइंटर भी पहुंच जाता है. हालांकि, अगर माउस को तेज़ी से ले जाया जाता है, तो स्क्रीन पर मौजूद पॉइंटर भी तेज़ी से आगे बढ़ता है.
ऑपरेटिंग सिस्टम, माउस की रफ़्तार बढ़ाने की सुविधा डिफ़ॉल्ट रूप से चालू करते हैं. आम तौर पर, पहले पक्ष के दर्शक के नज़रिए वाले कुछ गेम, जैसे कि फ़र्स्ट-पर्सन शूटर (एफ़पीएस) के लिए, माउस के इनपुट डेटा का इस्तेमाल किया जाता है. इससे, कैमरे के रोटेशन को तेज़ी से बदले बिना कंट्रोल किया जा सकता है. एक ही तरह की गति, चाहे वह धीमी हो या तेज़, एक ही तरह के रोटेशन का नतीजा देती है. इससे, पेशेवर गेमर को बेहतर गेमिंग अनुभव मिलता है और गेम में होने वाली गतिविधियां ज़्यादा सटीक तरीके से दिखाई जाती हैं.
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();
}
});
}
पॉइंटर लॉक को छोड़े बिना, माउस की गति के डेटा को तेज़ और सामान्य के बीच टॉगल किया जा सकता है. अपनी पसंद के विकल्प के साथ, फिर से पॉइंटर लॉक का अनुरोध करें. अगर वह अनुरोध पूरा नहीं होता है, तो ओरिजनल लॉक बरकरार रहेगा और लौटाए गए प्रॉमिस को अस्वीकार कर दिया जाएगा. बदलाव के अनुरोध के पूरा न होने पर, कोई भी पॉइंटर लॉक इवेंट ट्रिगर नहीं होगा.
ब्राउज़र समर्थन
पॉइंटर लॉक एपीआई, सभी ब्राउज़र पर अच्छी तरह से काम करता है. हालांकि, अक्टूबर 2020 तक, सिर्फ़ Chromium पर आधारित ब्राउज़र (जैसे, Chrome, Edge वगैरह) में, माउस ऐक्सेलरेशन के लिए ऑपरेटिंग सिस्टम के लेवल पर किए जाने वाले अडजस्टमेंट को बंद करने की सुविधा काम करती है. अपडेट के लिए, MDN की अलग-अलग ब्राउज़र के साथ काम करने की सुविधा वाली टेबल देखें.
ऑपरेटिंग सिस्टम से जुड़ी सहायता
माउस ऐक्सेलरेशन के लिए, ओएस-लेवल पर होने वाले अडजस्टमेंट को बंद करने की सुविधा, ChromeOS, macOS Catalina 10.15.1, और Windows पर काम करती है. Linux भी ऐसा ही करेगा.
नमूना
Glitch पर सैंपल चलाकर, पॉइंटर लॉक एपीआई को आज़माया जा सकता है. सोर्स कोड देखना न भूलें.
मदद के लिए लिंक
- एक्सप्लेनर
- स्पेसिफ़िकेशन पीआर
- GitHub की डेटा स्टोर करने की जगह
- ChromeStatus एंट्री
- Chrome में ट्रैकिंग से जुड़ी गड़बड़ी
- शिप करने का इंटेंट
- Mozilla की स्थिति
- WebKit की स्थिति
आभार
इस लेख की समीक्षा करने के लिए, जेम्स होलीयर, थॉमस स्टाइनर, जो मेडली, केस बेस्केस, और विन्सेंट स्कीब का धन्यवाद.