যদিও cursor: noneসিএসএস সমাধান স্পষ্টভাবে একটি কঠিন এবং সহজ কার্যসংক্রান্ত আপনার প্রকৃত লক্ষ্যে পৌঁছাতে হলে অপসারণ করার সময় আপনার ওয়েব অ্যাপ্লিকেশন ব্যবহার করা হচ্ছে ডিফল্ট কার্সার, অথবা আপনার বাস্তবায়ন নিজের কাঁচা মাউস আন্দোলনের ব্যাখ্যা (FPS যে গেম, উদাহরণস্বরূপ জন্য), আপনি হয়তো পরিবর্তে পয়েন্টার লক এপিআই ব্যবহার করে বিবেচনা করতে চান ।
আপনি কার্সার অপসারণ করতে কোনও উপাদানটিতে অনুরোধপয়েন্টারলকটি ব্যবহার করতে পারেন এবং সমস্ত mousemoveইভেন্টগুলি সেই উপাদানটিতে পুনর্নির্দেশ করতে পারেন (যা আপনি পরিচালনা করতে পারেন বা নাও পরিচালনা করতে পারেন):
document.body.requestPointerLock();
লকটি প্রকাশ করতে, আপনি প্রস্থানকর্তা লক ব্যবহার করতে পারেন :
document.exitPointerLock();
অতিরিক্ত নোট
বাস্তবের জন্য কোনও কার্সার নেই
এটি একটি খুব শক্তিশালী এপিআই কল। এটি কেবল আপনার কার্সরটিকে অদৃশ্য করে না, তবে এটি আসলে আপনার অপারেটিং সিস্টেমের নেটিভ কার্সারটিকে সরিয়ে দেয় । পয়েন্টার লকটি প্রকাশ না হওয়া অবধি ( কিছু ব্রাউজার ব্যবহার করে বা টিপে ) আপনি পাঠ্য নির্বাচন করতে বা আপনার মাউসের সাথে কিছু কিছু করতে পারবেন না (আপনার কোডের কিছু মাউস ইভেন্ট শোনার ব্যতীত )।exitPointerLockESC
অর্থাৎ, কার্সার না থাকায় আপনি উইন্ডোটি আপনার কার্সর দিয়ে আবার দেখাতে পারবেন না।
বিধিনিষেধ
উপরে উল্লিখিত হিসাবে, এটি একটি খুব শক্তিশালী এপিআই কল এবং এটি কেবলমাত্র ক্লিকের মতো ওয়েবে কিছু প্রত্যক্ষ ব্যবহারকারী-কথোপকথনের প্রতিক্রিয়া হিসাবে করা যেতে পারে; উদাহরণ স্বরূপ:
document.addEventListener("click", function () {
document.body.requestPointerLock();
});
এছাড়াও, অনুমতি সেট না করা requestPointerLockস্যান্ডবক্সযুক্ত থেকে কাজ করবে না ।iframeallow-pointer-lock
ব্যবহারকারী-বিজ্ঞপ্তিগুলি
কিছু ব্রাউজারগুলি লকটি নিযুক্ত করার আগে ব্যবহারকারীকে একটি নিশ্চিতকরণের জন্য অনুরোধ জানাবে, কেউ কেউ কেবল কোনও বার্তা প্রদর্শন করবে। এর অর্থ কলের পরে পয়েন্টার লকটি এখনই সক্রিয় হবে না। যাইহোক, পয়েন্টার লকিংয়ের আসল অ্যাক্টিভেশনটি pointerchangeযে উপাদানটির requestPointerLockজন্য আহ্বান করা হয়েছিল সে সম্পর্কিত ইভেন্টটি শুনে শোনা যাবে :
document.body.addEventListener("pointerlockchange", function () {
if (document.pointerLockElement === document.body) {
// Pointer is now locked to <body>.
}
});
বেশিরভাগ ব্রাউজার কেবল একবার বার্তা প্রদর্শন করবে তবে ফায়ারফক্স মাঝে মাঝে প্রতিটি কলটিতে বার্তাটি স্প্যাম করবে। আফাইক, এটি কেবল ব্যবহারকারী-সেটিংস দ্বারা কাজ করা যেতে পারে, ফায়ারফক্সে পয়েন্টার-লক বিজ্ঞপ্তি অক্ষম দেখুন ।
কাঁচা মাউস চলাচলের কথা শুনছি
পয়েন্টার লক এপিআই কেবল মাউসটিকে সরিয়ে দেয় না, পরিবর্তে কাঁচা মাউস মুভমেন্ট ডেটাটিকে উপাদানটিতে পুনঃনির্দেশ requestPointerLockকরে। mousemoveইভেন্টটি ব্যবহার করে , তারপরে ইভেন্ট অবজেক্টের বৈশিষ্ট্য movementXএবং movementYবৈশিষ্ট্যগুলিতে অ্যাক্সেসের মাধ্যমে এটি শোনা যায় :
document.body.addEventListener("mousemove", function (e) {
console.log("Moved by " + e.movementX + ", " + e.movementY);
});