마우스 포인터와 스크롤의 좌표 취득에 관한 일

소개



HTML, CSS, JavaScript로 마우스 포인터와 스크롤 좌표를 얻는 것과 관련이 있습니다.
구현하기까지 생각했던 것보다 시간이 걸려 버렸기 때문에, 생긴 것을 메모적인 느낌으로, 이 기사에 정리했습니다.

결과적으로 다음과 같은 것이 가능했습니다.


오른쪽 상단에는 마우스 포인터와 스크롤 좌표 값이 표시됩니다.
세로로 스크롤하면 스크롤의 Y 값에 따라 상자가 움직입니다.
또, 마우스 포인터의 x 좌표가 500을 경계로 배경의 색이 바뀌게 되어 있습니다.

소스 코드



index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>マウスポインタとスクロールの座標変化</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="coordinate">
        <div class="P_X">Pointer_X</div>
        <div class="P_Y">Pointer_Y</div>
        <div class="S_X">Scroll_X</div>
        <div class="S_Y">Scroll_Y</div>
    </div>

    <div class="scrollX_box"></div>

    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>

    <script src="main.js"></script>
</body>
</html>

styles.css
body{
    margin:0;
    background-color:aquamarine;
}

.coordinate{
    z-index:1;
    width:100%;
    display:flex;
    flex-direction:column;
    text-align:right;
    position:fixed;
}

.scrollX_box{
    width:2000px;
    height:300px;
    background-color:pink;
}

.box{
    width:300px;
    height:300px;
}

.box:nth-of-type(3n){
    background-color:orange;
}

.box:nth-of-type(3n+1){
    background-color:skyblue;
}

.box:nth-of-type(3n+2){
    background-color:tomato;
}

.move{
    transition-duration:2s;
    transform:translateX(500px);
}

main.js
"use strict";

{
    const UPDATE=window.setInterval(update,20);

    const BODY=document.body;

    const P_X=document.querySelector(".P_X");
    const P_Y=document.querySelector(".P_Y");
    const S_X=document.querySelector(".S_X");
    const S_Y=document.querySelector(".S_Y");

    const BOXES=document.querySelectorAll(".box");

    let px,py;
    let sx,sy;

    //マウスポインタの座標の取得
    window.addEventListener("mousemove",(e)=>{
        px=e.pageX;
        py=e.pageY;

        P_X.textContent="Pointer_X:"+px;
        P_Y.textContent="Pointer_Y:"+py;
    }); 

    //スクロールの座標の取得
    window.addEventListener("scroll",(e)=>{
        sx=pageXOffset;
        sy=pageYOffset;

        S_X.textContent="Scroll_X:"+sx;
        S_Y.textContent="Scroll_Y:"+sy;
    },{passive:true});


    function update(){
        //縦スクロールによって、ボックスが移動する処理
        for(let i=0;i<BOXES.length;i++){
            if((i+1)*300<=sy && sy<(i+2)*300){
                BOXES[i].classList.add("move");
            }else{
                BOXES[i].classList.remove("move");
            }
        }

        //マウスポインタのx座標が500を境に背景の色が変わる処理
        if(px<500){
            BODY.style.backgroundColor="aquamarine";
        }else{
            BODY.style.backgroundColor="limegreen";
        }
    }
}

이제 마침내 잘 움직였습니다!
하고 싶을 수 있을 것 같고, 안심하고 있습니다.

여기까지 읽어 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기