পয়েন্টার ইভেন্টগুলি ক্যাপচার করার সময় ওয়েব অ্যাপগুলি এখন মাউস ত্বরণ অক্ষম করতে পারে৷
একটি মাউস বা ট্র্যাকপ্যাড ব্যবহার করার সময় স্ক্রীনে পয়েন্টার সরানোর জন্য ত্বরিত আন্দোলন হল একটি ergonomic বৈশিষ্ট্য। এটি ধীরে ধীরে নড়াচড়া করে সুনির্দিষ্ট নড়াচড়ার অনুমতি দেয় এবং পয়েন্টারকে দ্রুত সংক্ষিপ্ত গতির সাথে পুরো স্ক্রীন অতিক্রম করার অনুমতি দেয়। বিশেষ করে, আপনি মাউস নাড়াচাড়া করার জন্য একই শারীরিক দূরত্বের জন্য, যদি দূরত্বটি দ্রুত ভ্রমণ করা হয় তবে স্ক্রিনের পয়েন্টারটি আরও ভ্রমণ করে।
অপারেটিং সিস্টেম ডিফল্টরূপে মাউস ত্বরণ সক্ষম করে। কিছু প্রথম পক্ষের দৃষ্টিকোণ গেমের জন্য, সাধারণত ফার্স্ট-পারসন শুটার (FPS), ত্বরণ সমন্বয় ছাড়াই ক্যামেরার ঘূর্ণন নিয়ন্ত্রণ করতে কাঁচা মাউস ইনপুট ডেটা ব্যবহার করা হয়। একই শারীরিক গতি, ধীর বা দ্রুত, একই ঘূর্ণনের ফলাফল। এর ফলে পেশাদার গেমারদের মতে আরও ভালো গেমিং অভিজ্ঞতা এবং উচ্চতর নির্ভুলতা পাওয়া যায়।
Chrome 88 থেকে শুরু করে, আপডেট করা পয়েন্টার লক এপিআইকে ধন্যবাদ, ওয়েব অ্যাপগুলি দ্রুতগতিতে এবং নন-অ্যাক্সিলারেটেড মাউস মুভমেন্ট ডেটার মধ্যে পিছনে যেতে পারে৷
ওয়েব-ভিত্তিক গেমিং প্ল্যাটফর্ম যেমন Google Stadia এবং Nvidia GeForce Now ইতিমধ্যে FPS গেমারদের খুশি করতে এই নতুন ক্ষমতাগুলি ব্যবহার করে৷
API ব্যবহার করে
একটি পয়েন্টার লক অনুরোধ করুন
একটি পয়েন্টার লক হল ক্যানোনিকাল শব্দ যখন একটি ডেস্কটপ অ্যাপ্লিকেশন পয়েন্টার আইকন লুকিয়ে রাখে এবং অন্য কিছুর জন্য মাউসের গতি ব্যাখ্যা করে, যেমন একটি 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();
}
});
}
পয়েন্টার লক রিলিজ না করেই ত্বরিত এবং নন-এক্সিলারেটেড মাউস মুভমেন্ট ডেটার মধ্যে টগল করা সম্ভব। শুধুমাত্র পছন্দসই বিকল্পের সাথে আবার পয়েন্টার লক অনুরোধ করুন. সেই অনুরোধ ব্যর্থ হলে, আসল লকটি অক্ষত থাকবে এবং প্রত্যাবর্তিত প্রতিশ্রুতি প্রত্যাখ্যান হবে। ব্যর্থ পরিবর্তনের অনুরোধের জন্য কোনো পয়েন্টার লক ইভেন্ট ফায়ার হবে না।
ব্রাউজার সমর্থন
পয়েন্টার লক API ব্রাউজার জুড়ে সমর্থিত । তবে ক্রোমিয়াম-ভিত্তিক ব্রাউজারগুলি (যেমন Chrome, এজ, ইত্যাদি) শুধুমাত্র অক্টোবর 2020 থেকে মাউস ত্বরণের জন্য OS-স্তরের সামঞ্জস্য নিষ্ক্রিয় করা সমর্থন করে। আপডেটের জন্য MDN-এর ব্রাউজার সামঞ্জস্যপূর্ণ সারণী দেখুন।
অপারেটিং সিস্টেম সমর্থন
মাউস ত্বরণের জন্য OS-স্তরের সমন্বয় অক্ষম করা ChromeOS, macOS Catalina 10.15.1, এবং Windows-এ সমর্থিত। লিনাক্স অনুসরণ করবে।
নমুনা
আপনি গ্লিচে নমুনা চালিয়ে পয়েন্টার লক API এর সাথে খেলতে পারেন। সোর্স কোড চেক আউট করতে ভুলবেন না.
সহায়ক লিঙ্ক
- ব্যাখ্যাকারী
- স্পেসিফিকেশন পিআর
- GitHub সংগ্রহস্থল
- ChromeStatus এন্ট্রি
- ক্রোম ট্র্যাকিং বাগ
- জাহাজে করার অভিপ্রায়
- মজিলার অবস্থান
- WebKit এর অবস্থান
স্বীকৃতি
জেমস হোলিয়ার , থমাস স্টেইনার , জো মেডলি , কায়স বাস্কস এবং ভিনসেন্ট শেইবকে তাদের এই নিবন্ধটির পর্যালোচনার জন্য ধন্যবাদ।