728x90

Pointer Lock API는 캔버스나 게임 창과 같은 웹 페이지의 특정 요소에 마우스 커서를 고정할 수 있는 JavaScript API입니다. 이는 게임, 몰입형 경험 또는 정확한 마우스 제어가 중요한 기타 애플리케이션에 유용할 수 있습니다.

다음은 Pointer Lock API를 사용하는 방법의 예입니다.

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Pointer Lock API Example</title>

<style>

#gameCanvas {

width: 640px;

height: 480px;

background-color: #000000;

}

</style>

</head>

<body>

<canvas id="gameCanvas"></canvas>

<script>

var canvas = document.getElementById("gameCanvas");

var context = canvas.getContext("2d");

// Lock the mouse pointer to the canvas

canvas.requestPointerLock = canvas.requestPointerLock ||

canvas.mozRequestPointerLock ||

canvas.webkitRequestPointerLock;

canvas.requestPointerLock();

// Add event listeners to handle mouse movement

document.addEventListener("mousemove", handleMouseMove, false);

document.addEventListener("pointerlockchange", handlePointerLockChange, false);

document.addEventListener("webkitpointerlockchange", handlePointerLockChange, false);

document.addEventListener("mozpointerlockchange", handlePointerLockChange, false);

// Function to handle mouse movement

function handleMouseMove(event) {

// Check if the mouse pointer is locked

if (document.pointerLockElement === canvas ||

document.mozPointerLockElement === canvas ||

document.webkitPointerLockElement === canvas) {

// Update the canvas based on the mouse movement

var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;

var movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;

context.fillStyle = "#ffffff";

context.fillRect(movementX, movementY, 5, 5);

}

}

// Function to handle changes in pointer lock state

function handlePointerLockChange(event) {

if (document.pointerLockElement === canvas ||

document.mozPointerLockElement === canvas ||

document.webkitPointerLockElement === canvas) {

console.log("Mouse locked to canvas.");

} else {

console.log("Mouse unlocked from canvas.");

}

}

</script>

</body>

</html>

이 예제에는 ID가 "gameCanvas"인 캔버스 요소가 있습니다. 먼저 `requestPointerLock()` 메서드를 사용하여 이 캔버스에서 포인터 잠금을 요청합니다. 그런 다음 이벤트 리스너를 추가하여 마우스 이동 및 포인터 잠금 상태의 변경을 처리합니다.

`handleMouseMove()` 함수는 포인터가 캔버스에 잠겨 있는 동안 마우스를 움직일 때마다 호출됩니다. `pointerLockElement` 속성을 사용하여 포인터가 잠겨 있는지 확인한 다음 마우스 움직임을 기반으로 캔버스를 업데이트합니다.

`handlePointerLockChange()` 함수는 포인터 잠금 상태가 변경될 때마다 호출됩니다. 캔버스가 현재 포인터 잠금 요소인지 확인한 다음 마우스가 잠겨 있는지 또는 잠금 해제되었는지를 나타내는 메시지를 콘솔에 기록합니다.

Pointer Lock API는 모든 브라우저에서 지원되지 않으므로 애플리케이션에서 사용하기 전에 지원 여부를 확인해야 합니다.

728x90

+ Recent posts