ãã¤ã³ã¿ã¼ãã㯠API ï¼ä»¥å㯠ãã¦ã¹ãã㯠API ã¨å¼ã°ãã¦ãã¾ããï¼ã¯ããã¥ã¼ãã¼ãå ã®ãã¦ã¹ã«ã¼ã½ã«ã®çµ¶å¯¾ä½ç½®ã ãã§ãªããæéã®çµéã«ä¼´ããã¦ã¹ã®åãï¼ããªãã¡ããã«ã¿ï¼ã«åºã¥ãå ¥åæ¹æ³ãæä¾ãã¾ããããã«ããããã¦ã¹ã®çã®ç§»åéãç¥ããã¨ãã§ãããã¦ã¹ã¤ãã³ãã®ã¿ã¼ã²ãããã²ã¨ã¤ã®è¦ç´ ã«ããã¯ã§ãããã¦ã¹ã䏿¹åã¸ã©ãã ãç§»åã§ãããã®å¶éãé¤å»ã§ããè¦éããã«ã¼ã½ã«ãåãé¤ããã¨ãã§ãã¾ãããããã¯ãæ¬äººè¦ç¹ã® 3D ã²ã¼ã ãªã©ã§çæ³çã§ãã
ããã«ãã® API ã¯ãåãã®ã³ã³ããã¼ã«ããªãã¸ã§ã¯ãã®å転ãã¨ã³ããªã¼ã®å¤æ´ã«ããªãã®ãã¦ã¹æä½ãå¿ è¦ã«ãªãã¢ããªã±ã¼ã·ã§ã³ã§å½¹ç«ã¡ã¾ããä¾ãã°ãªãããã®ãã¿ã³ãã¯ãªãã¯ãããã¨ãªãããã¦ã¹ãåããã ãã§è¦éè§ãå¶å¾¡ã§ãã¾ãããã¿ã³ã¯ä»ã®æä½ã®ããã«ä½¿ç¨ã§ãã¾ããã¾ããå°å³ãè¡æç»åãè¦ãã¢ããªã§ãå½¹ã«ç«ã¡ã¾ãã
ãã¤ã³ã¿ã¼ããã¯ã§ã¯ãã«ã¼ã½ã«ããã©ã¦ã¶ã¼ãã¹ã¯ãªã¼ã³ã®å¢çãéãéããã¨ãã§ããã¦ã¹ã¤ãã³ãã«ã¢ã¯ã»ã¹ã§ãã¾ããä¾ãã°ã¦ã¼ã¶ã¼ã¯éããªããã¦ã¹ãåãããã¨ã§ã3D ã¢ãã«ã®å転ãæä½ãç¶ãããã¨ãã§ãã¾ãããã¤ã³ã¿ã¼ããã¯ããªããã°ããã¤ã³ã¿ã¼ããã©ã¦ã¶ã¼ã¾ãã¯ã¹ã¯ãªã¼ã³ã®ç«¯ã«éããã¨ãã«å転ãæä½ãæ¢ã¾ãã¾ããã²ã¼ã ã®ãã¬ã¤ã¤ã¼ã¯ãã¦ã¹ã«ã¼ã½ã«ãã²ã¼ã ã®ãã¬ã¤é åããå¤ãã¦ãå¥ã®ã¢ããªã±ã¼ã·ã§ã³ãæå³ããã¯ãªãã¯ãã¦ã²ã¼ã ãããã¦ã¹ã®ãã©ã¼ã«ã¹ãå¤ãã¦ãã¾ããã¨ãå¿é ããã«ãç±ä¸ãã¦ãã¿ã³ãã¯ãªãã¯ãããããã¦ã¹ã«ã¼ã½ã«ããã¡ãã¡ã«åãããããããã¨ãã§ããããã«ãªãã¾ãã
åºæ¬æ¦å¿µãã¤ã³ã¿ã¼ããã¯ã¯ ãã¦ã¹ãã£ãã㣠ã¨é¢ä¿ãããã¾ãããã¦ã¹ãã£ããã£ã¯ãã¦ã¹ã®ãã©ãã°ä¸ã«ã¿ã¼ã²ããã®è¦ç´ ã¸ç¶ç¶çã«ã¤ãã³ããæä¾ãã¾ããããã¦ã¹ã®ãã¿ã³ãé¢ãã¨ã¤ãã³ãã忢ãã¾ãããã¤ã³ã¿ã¼ããã¯ã¨ãã¦ã¹ãã£ããã£ã®éãã¯ä»¥ä¸ã®ã¨ããã§ãã
ããã§ã¯ããã¤ã³ã¿ã¼ããã¯ä»æ§ã«é¢ä¿ããããããã£ãã¡ã½ãããç°¡åã«èª¬æãã¾ãã
requestPointerLock()ãã¤ã³ã¿ã¼ãã㯠API 㯠å
¨ç»é¢ API ã¨åæ§ã«ã DOM è¦ç´ ã«æ°ããªã¡ã½ãã requestPointerLock()
ã追å ãããã¨ã§æ¡å¼µãã¦ãã¾ããæ¥é è¾ãæè¿åé¤ããã¾ããã®ã§ãä¾ãã° canvas
è¦ç´ ã§ ãã¤ã³ã¿ã¼ããã¯ãè¦æ±ãããå ´åã¯ãç¾å¨ã¯ä»¥ä¸ã®ããã«å®£è¨ãã¾ãã
canvas.requestPointerLock =
canvas.requestPointerLock || canvas.mozRequestPointerLock;
canvas.requestPointerLock();
ã¡ã¢: ã¦ã¼ã¶ã¼ãæ¢å®ã®ããã¯è§£é¤ã¸ã§ã¹ãã£ã§ãã¤ã³ã¿ã¼ããã¯ãè§£é¤ããå ´åãã¾ãã¯ãã®ææ¸ã«å¯¾ãã¦ä»¥åã«ãã¤ã³ã¿ã¼ããã¯ãå
¥åããã¦ããªãå ´åãã¨ã³ã²ã¼ã¸ã¡ã³ãã¸ã§ã¹ãã£ã®çµæã¨ãã¦çæãããã¤ãã³ãã requestPointerLock
ãæåããåã«ãææ¸å
ã§åä¿¡ããå¿
è¦ãããã¾ããï¼https://w3c.github.io/pointerlock/#extensions-to-the-element-interface ããï¼
ãã¤ã³ã¿ã¼ãã㯠API 㯠Document
ã¤ã³ã¿ã¼ãã§ã¤ã¹ãæ¡å¼µãã¦ãããæ°ããªããããã£ãã¡ã½ããã追å ãã¦ãã¾ããæ°ããªãããã㣠pointerLockElement
ã¯ãç¾å¨ããã¯ãã¦ããè¦ç´ ãããå ´åã«ããã®è¦ç´ ã¸ã¢ã¯ã»ã¹ããããã«ä½¿ç¨ãã¾ããã¾ãã Document
æ°ããªã¡ã½ããã§ãã exitPointerLock()
ã¯ãååã示åããã¨ãããã¤ã³ã¿ã¼ããã¯ãçµããããã«ä½¿ç¨ãã¾ãã
pointerLockElement
ããããã£ã¯è¦ç´ ãç¾å¨ãã¤ã³ã¿ã¼ãããã¯ç¶æ
ã§ãããã夿ããï¼ä¾ãã°è«çåã§ãã§ãã¯ãè¡ãï¼ãããã¾ãã¯ããã¯ãããè¦ç´ ãããã°ãã®è¦ç´ ã¸ã®åç
§ãå¾ãããã«æç¨ã§ãã
pointerLockElement
ã®ä½¿ç¨ä¾ã示ãã¾ãã
if (
document.pointerLockElement === canvas ||
document.mozPointerLockElement === canvas
) {
console.log("The pointer lock status is now locked");
} else {
console.log("The pointer lock status is now unlocked");
}
Document.exitPointerLock()
ã¡ã½ããã¯ãã¤ã³ã¿ã¼ããã¯ãçµããããã«ä½¿ç¨ãããrequestPointerLock()
ã¨åæ§ã« pointerlockchange
ã¤ãã³ãã pointerlockerror
ã¤ãã³ããç¨ãã¦éåæçã«åä½ãã¾ãã使ç¨ä¾ã¯ä»¥ä¸ã®ã¨ããã§ãã
document.exitPointerLock =
document.exitPointerLock || document.mozExitPointerLock;
// ããã¯è§£é¤ã試ã¿ã
document.exitPointerLock();
pointerlockchange ã¤ãã³ã
ãã¤ã³ã¿ã¼ããã¯ã®ç¶æ
ãå¤åããã¨ããä¾ãã° requestPointerLock()
ã exitPointerLock()
ãå¼ã³åºããã¨ãããã¦ã¼ã¶ã¼ã ESC ãã¼ãæ¼ä¸ããã¨ããªã©ã«ãpointerlockchange
ã¤ãã³ãã document
ã«çºçãã¾ããããã¯ã·ã³ãã«ãªã¤ãã³ãã§ãããä»å çãªãã¼ã¿ã¯å«ã¾ãã¾ããã
if ("onpointerlockchange" in document) {
document.addEventListener("pointerlockchange", lockChangeAlert, false);
} else if ("onmozpointerlockchange" in document) {
document.addEventListener("mozpointerlockchange", lockChangeAlert, false);
}
function lockChangeAlert() {
if (
document.pointerLockElement === canvas ||
document.mozPointerLockElement === canvas
) {
console.log("The pointer lock status is now locked");
// å¿çã¨ãã¦å½¹ã«ç«ã¤å¦ç
} else {
console.log("The pointer lock status is now unlocked");
// å¿çã¨ãã¦å½¹ã«ç«ã¤å¦ç
}
}
pointerlockerror ã¤ãã³ã
requestPointerLock()
ã¾ã㯠exitPointerLock()
ã®å¼ã³åºãã«ããã¨ã©ã¼ãçºçããã¨ãã¯ãpointerlockerror
ã¤ãã³ãã document
ã«çºçãã¾ããããã¯ã·ã³ãã«ãªã¤ãã³ãã§ãããä»å çãªãã¼ã¿ã¯å«ã¾ãã¾ããã
document.addEventListener("pointerlockerror", lockError, false);
document.addEventListener("mozpointerlockerror", lockError, false);
function lockError(e) {
alert("Pointer lock failed");
}
ã¡ã¢: Firefox 50 ã¾ã§ãä¸è¨ã®ã¤ãã³ã㯠moz
æ¥é è¾ãä»å ãã¦ãã¾ããã
ãã¤ã³ã¿ã¼ãã㯠API ã¯é常㮠MouseEvent
ã¤ã³ã¿ã¼ãã§ã¤ã¹ããmovement 屿§ã§æ¡å¼µãã¾ããæ°ã㪠2 ã¤ã®å±æ§ movementX
ããã³ movementY
ãããã¦ã¹ãã¤ã³ã¿ã¼ã®ä½ç½®ã®å¤åãæä¾ãã¾ãã弿°ã®å¤ã¯ MouseEvent
ã®ããããã£ã§ãã screenX
ããã³ screenY
ã®å¤å士ã®å·®ã¨åãã§ããããããã®ããããã£ã¯ 2 ã¤ç¶ãã¦çºçãã mousemove
ã¤ãã³ã eNow
ããã³ ePrevious
ã«ä¿åããã¾ããè¨ãæããã¨ããã¤ã³ã¿ã¼ããã¯ã®ãã©ã¡ã¼ã¿ã¼ movementX
ã¯ãeNow.screenX - ePrevious.screenX
ã«ãªãã¾ãã
ãã¤ã³ã¿ã¼ããã¯ãæå¹ã§ããã¨ããæ¨æº MouseEvent
ã®ããããã£ã§ãã clientX
ãclientY
ãscreenX
ãscreenY
ã¯ããã¦ã¹ãåãã¦ããªããã®ããã«å¤ãåºå®ããã¾ããmovementX
ããããã£ããã³ movementY
ããããã£ãããã¦ã¹ã®ä½ç½®ã®å¤åãæä¾ãç¶ãã¾ãããã¦ã¹ã䏿¹åã¸é£ç¶çã«ç§»åããã¨ãã¦ããmovementX
ããã³ movementY
ã®å¤ã«å¶éã¯ããã¾ããããã¦ã¹ã«ã¼ã½ã«ã¯åå¨ãããã¦ã£ã³ãã¦ããå¤ãããã¹ã¯ãªã¼ã³ã®ç«¯ã§æ¢ã¾ã£ããããªãã¨ããèãæ¹ã§ãã
弿° movementX
ããã³ movementY
ã¯ãã¦ã¹ã®ããã¯ç¶æ
ã«ãããããæå¹ã§ãããããã¯ããã¦ããªãç¶æ
ã§ãå©ä¾¿æ§ã®ããã«ä½¿ç¨ã§ãã¾ãã
ãã¦ã¹ã®ããã¯ãè§£é¤ãããã¨ãã·ã¹ãã ã«ã¼ã½ã«ãåå¨ããããã«ãªãããã©ã¦ã¶ã¼ãã¦ã£ã³ãã¦è¡¨ç¤ºã«æ»ãã¾ãããã®ã¨ããmovementX
ããã³ movementY
㯠0 ã«è¨å®ãããããããã¾ããã
ãã¤ã³ã¿ã¼ããã¯ã®ä½¿ç¨æ¹æ³ãã·ã³ãã«ãªå¶å¾¡ã·ã¹ãã ã®è¨å®æ¹æ³ã示ããããã·ã³ãã«ãª ãã¤ã³ã¿ã¼ããã¯ã®ã㢠ã使ãã¾ãã (ã½ã¼ã¹ã³ã¼ãã確èªãã)ããã®ãã¢ã§ã¯ãJavaScript ã使ç¨ã㦠<canvas>
è¦ç´ ä¸ã«ãã¼ã«ãæç»ãã¾ããcanvas ãã¯ãªãã¯ãã㨠ãã¤ã³ã¿ã¼ããã¯ããã¦ã¹ãã¤ã³ã¿ã¼ãåãé¤ãã¦ããã¦ã¹ã使ç¨ãã¦ãã¼ã«ãç´æ¥åãããã¨ãã§ãã¾ãããã®ãã¢ã®ä»çµã¿ãè¦ã¦ããã¾ãããã
canvas å ã®ãx ããã³ y ã®åæä½ç½®ãè¨å®ãã¾ãã
const x = 50;
const y = 50;
ç¾å¨ã¯ ãã¤ã³ã¿ã¼ããã¯ã®ã¡ã½ããã«æ¥é è¾ãã¤ãã¦ãã¾ãã®ã§ããã©ã¦ã¶ã¼å®è£ ãã¨ã«å¦çãåãã¦ãã¾ãã
canvas.requestPointerLock =
canvas.requestPointerLock || canvas.mozRequestPointerLock;
document.exitPointerLock =
document.exitPointerLock || document.mozExitPointerLock;
ãã£ã³ãã¹ãã¯ãªãã¯ãããã¨ãã«ããã£ã³ãã¹ã§ requestPointerLock()
ã¡ã½ãããå®è¡ããã¤ãã³ããªã¹ãã¼ãè¨å®ãã¾ããããã¯ããã¤ã³ã¿ã¼ããã¯ãéå§ãã¾ãã
canvas.onclick = () => {
canvas.requestPointerLock();
};
ãã¤ã³ã¿ã¼ããã¯ã¤ãã³ã pointerlockchange
ã®ã¤ãã³ããªã¹ãã¼ãè¨å®ãã¾ããã¤ãã³ããçºçãããããã¤ã³ã¿ã¼ããã¯ã®å¤æ´ãå¶å¾¡ããããã« lockChangeAlert()
ã¨ããååã®é¢æ°ãå®è¡ãã¾ãã
// ãã¤ã³ã¿ã¼ããã¯ã®ã¤ãã³ããªã¹ãã¼
// ãã¾ãã¾ãªãã©ã¦ã¶ã¼åãã«ããã¤ã³ã¿ã¼ããã¯ã®ç¶æ
å¤åã¤ãã³ããããã¯ãã
document.addEventListener("pointerlockchange", lockChangeAlert, false);
document.addEventListener("mozpointerlockchange", lockChangeAlert, false);
ãã®é¢æ°ã¯ã pointLockElement ããããã£ããã£ã³ãã¹ã示ãã¦ãããã確èªãã¾ãã示ãã¦ããå ´åã¯ããã¦ã¹ã®ç§»åãæ±ãããã«ãã¤ãã³ããªã¹ãã¼ã updatePosition()
ã«è¨å®ãã¾ãã示ãã¦ããªãå ´åã¯ãã¤ãã³ããªã¹ãã¼ãåã³åé¤ãã¾ãã
function lockChangeAlert() {
if (
document.pointerLockElement === canvas ||
document.mozPointerLockElement === canvas
) {
console.log("The pointer lock status is now locked");
document.addEventListener("mousemove", updatePosition, false);
} else {
console.log("The pointer lock status is now unlocked");
document.removeEventListener("mousemove", updatePosition, false);
}
}
updatePosition() 颿°ãããã£ã³ãã¹å
ã®ãã¼ã«ã®ä½ç½® (x
ããã³ y
) ãæ´æ°ãã¾ããã¾ãããã¼ã«ããã£ã³ãã¹ã®ç«¯ããã¯ã¿åºããããã§ãã¯ãã if()
æãå«ã¾ãã¦ãã¾ãããã¼ã«ãã¯ã¿åºãå ´åã¯ãå対å´ã®ç«¯ã«ãã¼ã«ãæç»ãã¾ããã¾ããrequestAnimationFrame()
ããã§ã«å¼ã³åºããããã確èªãã¦ãããå¼ã³åºãããå ´åã¯å¿
è¦ã«å¿ãã¦åã³å¼ã³åºãã¦ããã£ã³ãã¹ã®ã·ã¼ã³ãæ´æ°ããããã« canvasDraw()
颿°ãå¼ã³åºãã¾ããããã«ãåç
§ç¨ã« X ããã³ Y ã®ä½ç½®ã表示ããããã® tracker ãè¨å®ãã¾ãã
const tracker = document.getElementById("tracker");
let animation;
function updatePosition(e) {
x += e.movementX;
y += e.movementY;
if (x > canvas.width + RADIUS) {
x = -RADIUS;
}
if (y > canvas.height + RADIUS) {
y = -RADIUS;
}
if (x < -RADIUS) {
x = canvas.width + RADIUS;
}
if (y < -RADIUS) {
y = canvas.height + RADIUS;
}
tracker.textContent = `X position: ${x}, Y position: ${y}`;
if (!animation) {
animation = requestAnimationFrame(() => {
animation = null;
canvasDraw();
});
}
}
canvasDraw()
颿°ã¯ãç¾å¨ã® x
ããã³ y
ã®ä½ç½®ã«ãã¼ã«ãæç»ãã¾ãã
function canvasDraw() {
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "#f00";
ctx.beginPath();
ctx.arc(x, y, RADIUS, 0, degToRad(360), true);
ctx.fill();
}
iframe ã®å¶é
ãã¤ã³ã¿ã¼ããã¯ãä¸åº¦ã«ããã¯ã§ãã iframe 㯠1 ã¤ã ãã§ãã iframe ãã²ã¨ã¤ããã¯ããã¨ãå¥ã® iframe ãããã¯ãã¦ã¿ã¼ã²ãããåãæ¿ãããã¨ãããã¨ã¯ã§ãã¾ããããã¤ã³ã¿ã¼ããã¯ã¯ã¨ã©ã¼ã«ãªãã¾ãããã®å¶éãé¿ãããããå§ãã«ããã¯ããã iframe ã®ããã¯ãè§£é¤ãã¦ããå¥ã® iframe ãããã¯ãã¦ãã ããã
iframe ã®æ¢å®ã®åä½ã§ã¯ãããµã³ãããã¯ã¹åãããã iframe ã ãã¤ã³ã¿ã¼ããã¯ããããã¯ãã¾ãããã®å¶éãåé¿ããã«ã¯ã <iframe sandbox="allow-pointer-lock">
ã使ç¨ãã¦ãã ããã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4