메뉴 건너뛰기

<!DOCTYPE html>

<html lang="ko">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        td { width: 50px; height: 50px; border: 1px solid orchid;}

    </style>

</head>

<body>

    <table>

        <tr>

            <td>0</td>

            <td>1</td>

            <td>2</td>

        </tr>

        <tr>

            <td>3</td>

            <td>4</td>

            <td>5</td>

        </tr>

        <tr>

            <td>6</td>

            <td>7</td>

            <td>8</td>

        </tr>

    </table>


 

    <script>

        let tds;

        let prevIndex=0, index=0;

        window.onload = function(){

            tds = document.getElementsByTagName("td")

            tds[index].style.backgroundColor = 'orchid'

        }

 

        window.onkeydown = function(e){

            switch(e.key){

                case "ArrowDown" :

                    if(index/3 >= 2) return;

                    index += 3

                    break;

                case "ArrowUp" :

                    if(index/3 < 1) return;

                    index -= 3

                    break;

                case "ArrowLeft" :

                    if(index%3 == 0) return;

                    index--

                    break;

                case "ArrowRight" :

                    if(index%3 == 2) return;

                    index++

                    break;

            }

            tds[index].style.backgroundColor = 'orchid'

            tds[prevIndex].style.backgroundColor = 'white'

            prevIndex = index;

        }

    </script>

</body>

</html>

 

 

이런느낌에 예제인데요 이것만 너무 이해가 안돼서 질문이 많습니다ㅜㅜ

1. tds[index]?

index = 0 이니까 tds(모든td태그)에 []이렇게 넣으니까 td의 0번째인 첫번째 td를 말하는거 같은데

변수에 0을 집어 넣고 그걸 배열에 넣어서 0번째를 찾은거다 라는 제 추측이 맞는건지 모르겠어요 맞나요? 아니라면 어떤방식으로 찾은건지 알려주세요

 

2. preIndex

마찬가지로 preIndex 가 어떻게 키보드로 움직이지 않은 모든 td를 나타나게 됐는지도 모르겠습니다.

 

3. switch 문에서 if문

window.onkeydown = function(e){

            switch(e.key){

                case "ArrowDown" :

                    if(index/3 >= 2) return; // 맨 위에 셀의 경우

                    index += 3

                    break;

                case "ArrowUp" :

                    if(index/3 < 1) return; // 맨 아래 셀의 경우

                    index -= 3

                    break;

                case "ArrowLeft" :

                    if(index%3 == 0) return; // 맨 왼쪽 셀의 경우

                    index--

                    break;

                case "ArrowRight" :

                    if(index%3 == 2) return; // 맨 오른쪽 셀의 경우

                    index++

                    break;

            }

 이렇게 나와있던데 

if문에 index가 어떨때 어떤값이 들어가는지를 모르겠습니다.

그리고 어떤값이 들어간다 하더라도

(index를3으로나눈게 2와 같거나 클경우 3더한다)등등의 이런 if문이

어떤원리로 키보드 방향키를 눌렀을 때 옯겨지고 하는지 전혀 이해못했습니다.

 

질문이 많아 죄송합니다 ㅜㅜ 도와주세요

 

?
  • ?
    황기태 2023.11.27 11:54
    1. 질문한 분께서 매우 열심히 탐구하고 있는 것 같아 보기 좋습니다만, 전반적으로 이 코드 전체를 설명해야 질문에 대해 이해할 수 있을 것 같아서, 지면으로 모든 것을 설명하기에는 어려움이 있는 것 같습니다.
    간단히 질문에 답을 하겠지만, 혹시 한성대학교 학생이라면 제 연구실로 찾아오면 디버깅하는 방법 등 자세히 설명해 드리겠습니다.

    2. 다음 코드는
    window.onload = function(){

    tds = document.getElementsByTagName("td")

    tds[index].style.backgroundColor = 'orchid'

    }

    웹브라우저에 HTML 파일을 완전히 출력한 시점(load 이벤트 발생)에 함수가 실행되도록 설정하는 것이고, 함수는 0~9까지의 수 중에서 0의 부분만(테이블 셀) 핑크 색으로 칠하는 코드입니다.
    이를 위해 index =0인 것이지요.

    3. index 는 사용자가 키를 움직일 때마다 값이 계속 바뀌도록 window.onkeydown = function(e){ ... } 에 코딩되었습니다.
    이 코든 현재 index 값에 따라 그리고 입력된 키에 따라 index 값을 변경합니다. 만일 오른쪽 키가 눌러 졌다면, case "ArrowRight" :의 코드가 실행됩니다.
    이 코드는 단순히 index 값을 1 증가시키면 될 것이지만, 만일 2, 5, 8 처럼 맨 오른쪽 박스를 가리킨다면(이들의 공통점은 3으로 나누었을 때 나머지가 2인 경우) 더 이상 오른쪽으로 갈 수 없습니다. 그런 경우 index 값을 바꾸지 않고 그냥 return 합니다. 그렇지 않은 경우index를 1증가시켜 오른쯕 박스가 선택되도록 합니다.

    4. 다음 2 문장은 테이블 셀의 바탕색을 바꾸는 코드입니다.
    tds[index].style.backgroundColor = 'orchid'
    tds[prevIndex].style.backgroundColor = 'white'

    이전에 orchid 색으로 칠해져 있던 셀의 다시 white로 칠하고, 키 입력에 의해 새로 선택된 셀에는 orchid 색으로 칠합니다.
    나머지 테이블 셀에 대해서는 아무 변경도 하지 않습니다.

    지면 관계상 설명을 더 자세히 하지 못한점 이해 부탁합니다.
    구체적인 질문이 있으면 답하기 좋을 것입니다
    질문이 있으면 또 올려 주세요.

    이상입니다.
  • ?
    아인슈페너 2023.11.27 14:49
    자세히 답변해 주셔서 감사합니다!
    설명보면서 다시보니 쉽게 이해가 되었습니다.
    감사합니다!
  • ?
    관리자 2023.11.27 16:21
    다행입니다.
    다음에도 이런식으로 이해하기 어려운 코드의 경우,
    브라우저가 제공하는 개발자 도구를 이용하면, 코드의 실행 과정을 하나씩 따라가 볼 수 있습니다.
    개발자 도구를 이용해보세요.

QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18330
403 혹시 예전 서적인 "DHTML + 자바스크립트 프로그래밍"의 예제를 받을 수 있는 방법은 없는지요? 2 비만타쿠미 2018.09.26 116
402 한글html 1 키보드 향기 2020.03.29 934
401 한글 타이틀이 깨져 보입니다. 1 안스가리오 2020.01.06 116
400 표와 div span 4 키보드 향기 2020.04.05 109
399 페이지에 첨부하고 싶은 이미지의 위치에대해 궁금합니다 1 정택희 2017.02.13 277
398 페이지 247 에 있는 Open Challenge 05 의 CSS3로 태그 배치하기를 공부하고 있는데 질문드립니다. 1 file 워니고 2018.03.28 3879
397 테스트 관리자 2019.08.30 171
396 태그와 속성 2 tc0712 2021.09.08 72
395 크롬 오디오 자동재생 관련 질문입니다! 1 ^_^ 2018.09.30 449
394 코드 잘못된 부분을 봐주시면 정말 감사하겠습니다 1 file 입문한 사람 2020.04.01 608
393 캔버스 관련 질문 1 원그리기 2021.08.22 101
392 챕터2 연습문제 8번 김석현 2018.04.22 156
391 챕터 3의 10번 문제 1 컴공과 입문 2018.03.20 125
390 책을 종이책으로 구매했는데 1 ddd 2024.03.21 106
389 책을 마치며 7 은성 2017.04.13 492
388 책 151p 3장 오픈챌린지 문제질문입니다. 3 이상민 2019.07.19 239
387 짝수번 정답 3 idididid 2017.12.24 3140
386 질문입니다 1 1213 2018.03.06 420
385 질문드립니다. 1 ㅇㅇ 2020.06.03 306
384 질문 있습니다. 2 2021.08.19 134
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로