LHJ

I'm a FE developer.

mousemove 값 활용

05 Oct 2020 » js_interactive_web

mousemove 값 활용

마우스 위치에 따라서 오브젝트가 움직일 수도 있고 따라올 수도 있다.
3D를 활용하면 깊이감도 마우스로 제어할 수 있다.
그리고 이게 PC에선 마우스인데 모바일로가면 자이로센서를 이용해서 그 값을 가지고 오브젝트를 움직일 수도 있다.
그치만 지금은 처음이기 때문에 마우스로 해보도록 하겠다.

다음은 예시 코드이다.

<!DOCTYPE html>
<html>
<head>
    <title>test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <style>
      body {
        background-color: black;
        cursor: none;
      }
      h1 {
        color: #fff;
      }
      .cursor_item {
        position: absolute;
        width : 100px;
        height : 100px;
        background-color: red;
        top:0;
        left:0;
      }
    </style>
    <script>
        window.onload = function () {
            let h1 = document.getElementsByTagName("h1")[0];
            let cursor_item = document.getElementsByClassName("cursor_item")[0];
            window.addEventListener('mousemove', mouseFunc, false);
            function mouseFunc(e) {
                h1.innerHTML = 'x: ' + e.clientX + ', y: ' + e.clientY;
                cursor_item.style.transform = "translate("+ e.clientX +"px," + e.clientY + "px)"
            }
        }
    </script>
</head>
<body>
  <h1>test</h1>
  <div class="cursor_item"></div>
</body>
</html>

clientX, clientY는 현재 열려있는 브라우저 창을 기준으로한 x, y 좌표값을 뜻한다.
window.onload를 한 이유는 화면이 다 로드가된 이후에 실행하라는 뜻이다.

포인트

body {
    cursor: none;
}
.cursor_item {
    position: absolute;
    width : 100px;
    height : 100px;
    background-color: red;
    top:0;
    left:0;
}
window.onload = function () {
    let h1 = document.getElementsByTagName("h1")[0];
    let cursor_item = document.getElementsByClassName("cursor_item")[0];
    window.addEventListener('mousemove', mouseFunc, false);
    function mouseFunc(e) {
        h1.innerHTML = 'x: ' + e.clientX + ', y: ' + e.clientY;
        cursor_item.style.transform = "translate("+ e.clientX +"px," + e.clientY + "px)"
    }
}