עכשיו אפליקציות אינטרנט יכולות להשבית את האצת העכבר בזמן תיעוד אירועים של זיהוי מיקום הסמן של משתמשים אחרים.
תנועה מואצת היא תכונה ארגונומית כשמשתמשים בעכבר או במשטח מגע כדי להזיז את הסמן על המסך. היא מאפשרת תנועה מדויקת על ידי הזזה לאט, תוך כדי לאפשר למצביע לעבור את כל המסך בתנועה קצרה מהירה. באופן ספציפי, באותו מרחק פיזי שבו מזיזים את העכבר, הסמן במסך נע רחוק יותר אם המרחק עבר מהר יותר.
מערכות הפעלה מאפשרות האצה של עכבר כברירת מחדל. בחלק ממשחקי פרספקטיבה מאינטראקציה ישירה, בדרך כלל משחקי יריות בגוף ראשון (FPS), הנתונים הגולמיים של הקלט מהעכבר משמשים לשליטה בסיבוב המצלמה ללא התאמת האצה. אותה תנועה פיזית, איטית או מהירה, גורמת לאותה סיבוב. כך מתקבלת חוויית גיימינג טובה יותר ודיוק גבוה יותר, לדברי גיימרים מקצועיים.
החל מגרסה 88 של Chrome, אפליקציות אינטרנט יכולות לעבור בין נתונים מואצת של תנועת עכבר לבין נתונים לא מואצת של תנועת עכבר בעזרת ה-API המעודכן לנעילת Pointer.
פלטפורמות משחקים מבוססות-אינטרנט כמו Google Stadia ו-Nvidia GeForce Now כבר משתמשות ביכולות החדשות האלה כדי לרצות גיימרים של משחקי FPS.
שימוש ב-API
בקשה לנעילה של מצביע העכבר
נעילה של הסמן היא המונח הקנוני למצב שבו אפליקציה למחשב מסתירה את סמל הסמן ומפרשת את תנועת העכבר כפעולה אחרת, למשל התבוננות בעולם תלת-ממדי.
המאפיינים movementX
ו-movementY
מאירועי המסמך mousemove
מצביעים על המרחק שבו נע סמן העכבר מאז אירוע ההזזה האחרון. עם זאת, הם לא מתעדכנים כשהסמן עובר אל מחוץ לדף האינטרנט.
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");
});
השבתת האצת העכבר
קוראים לפונקציה requestPointerLock()
באמצעות { unadjustedMovement: true }
כדי להשבית את ההתאמה ברמת מערכת ההפעלה לשיפור האצת העכבר, ולגשת לקלט עכבר גולמי.
כך, נתוני תנועת העכבר מאירועים של 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 נתמך היטב בכל הדפדפנים. עם זאת, דפדפנים המבוססים על Chromium (למשל, Chrome, Edge וכו') הם היחידים שתומכים בהשבתה של ההתאמה ברמת מערכת ההפעלה להאצת העכבר החל מאוקטובר 2020. לקבלת עדכונים, אפשר לעיין בטבלה של תאימות הדפדפן ב-MDN.
תמיכה במערכת ההפעלה
אפשר להשבית את ההתאמה ברמת מערכת ההפעלה לשיפור המהירות של העכבר ב-ChromeOS, ב-macOS Catalina 10.15.1 וב-Windows. Linux ייכלל בהמשך.
דוגמה
כדי לשחק עם Pointer Lock API, אפשר להריץ את הדוגמה ב-Glitch. חשוב לבדוק את קוד המקור.
קישורים שימושיים
- הסברים
- פרסום של מפרט
- מאגר ב-GitHub
- הרשומה ב-ChromeStatus
- באג מעקב ב-Chrome
- הכוונה למשלוח
- המיקום של Mozilla
- המיקום של WebKit
אישורים
תודה לג'יימס הולייר, תומס סטיינר, ג'ו מדלי, קייס בסקי ולוינסנט שייב על הביקורות שפרסמו על המאמר הזה.