본문 바로가기
혼공학습단 11기(完)

[혼공스] 6주차 미션

by jaeheon0520 2024. 2. 9.

 

혼공학습단 마지막 미션이다.

 

2024년 1월 3일부터 2월 9일까지 약 38일간 열심히 달렸다.

 

어떤 책이든 책 한 권을 다 보는 것이 쉽지 않은데 혼공학습단이라는 동기가 생겨서 꾸준하게 달려올 수 있었다.

 

혼공족장님을 포함해 함께 달려온 러닝 메이트 모두에게 감사하고 고생했다고 말해주고 싶다.

 

기본 미션

p.315의 <직접 해보는 손코딩>을 실행한 후 출력되는 고양이 이미지 캡처하기

 

코드

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            const rects = document.querySelectorAll('.rect') // 특정 클래스로 요소를 선택한다
           
            rects.forEach((rect, index) => {
                const width = (index + 1) * 100
                // index 값은 [0, 1, 2, 3]이 반복된다. 1을 더해서 [1, 2, 3, 4]가 반복되게 만들고
                // 100을 곱해서 너비가 [100, 200, 300, 400]이 되게 만들었다
                const src = `http://placekitten.com/${width}/250`
                rect.setAttribute('src', src) // src 속성에 값을 지정한다
            })
        })
    </script>
</head>
<body>
    <img class="rect">
    <img class="rect">
    <img class="rect">
    <img class="rect">
</body>
</html>

 

출력 된 이미지:

CUTE

 

선택 미션

p.352 누적 예제를 활용하여 본인이 할 일 목록을 만들어 캡처하기

 

코드

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
</head>
<body>
    <h1>할 일 목록</h1>
    <input id="todo">
    <button id="add-button">추가하기</button>
    <div id="todo-List">


    </div>
</body>
<script>
    document.addEventListener('DOMContentLoaded', () => {
        // 문서 객채를 가져옵니다
        const input = document.querySelector('#todo')
        const todoList = document.querySelector('#todo-List')
        const addButton = document.querySelector('#add-button')

        // 변수를 선언한다
        let keyCount = 0 // 이후에 removeTodo() 함수에서 문서 객체를 쉽게 제거하기 위한 용도로 만든 변수

        // 함수를 선언한다.
        const addTodo = () => {
            // 입력 양식에 내용이 없으면 추가하지 않는다
            if (input.value.trim() === '') {
                alert('할 일을 입력해주세요.')
                return
            }

            // 문서 객체를 설정한다
            const item = document.createElement('div')
            const checkbox = document.createElement('input')
            const text = document.createElement('span')
            const button = document.createElement('button')

            // 문서 객체를 식별할 키를 생성한다.
            const key = keyCount // 이후에 removeTodo() 함수에서 문서 객체를 쉽게 제거하기 위한 용도로 만든 변수
            keyCount += 1

            // item 객체를 조작하고 추가한다.
            item.setAttribute('data-key', key)
            item.appendChild(checkbox)
            item.appendChild(text)
            item.appendChild(button)
            todoList.appendChild(item)

            // <div data-key="숫자">
            //     <input>
            //     <span></span>
            //     <button></button>
            // </div>
            // 형태를 구성한다.

            // checkbox 객체를 조작한다
            checkbox.type = 'checkbox' // <div data-key="checkbox" 형태를 구성한다
            checkbox.addEventListener('change', (event) => { // checkbox를 클릭하면 선을 그어준다
                item.style.textDecoration = event.target.checked ? 'line-through' : ''
            })

            // text 객체를 조작한다.
            text.textContent = input.value // <span>글자</span> 형태를 구성

            // button 객체를 조작한다
            button.textContent = '제거하기'
            button.addEventListener('click', () => {
                removeTodo(key)
            })

            // 입력 양식의 내용을 비운다
            input.value = ''
        }

        const removeTodo = (key) => {
            // 식별 키로 문서 객체를 제거한다
            const item = document.querySelector(`[data-key="${key}"]`)
            // 위에서 지정한 <div data-key="숫자">를 기반으로 요소를 찾고 제거한다.
            todoList.removeChild(item)
        }

        // 이벤트 연결
        addButton.addEventListener('click', addTodo)
        input.addEventListener('keyup', (event) => {
            // 입력 양식에서 Enter 키를 누르면 addTodo() 함수를 호출한다
            const ENTER = 13 // 13은 ENTER의 keycode
            if (event.keyCode === ENTER) {
                addTodo()
            }
        })
    })
</script>
</html>
 

 

본인이 할 일 목록 만들어보기:

 

마무리

혼공학습단은 이렇게 마무리되지만 아직 뒷부분 고급편이 남아있다.

 

고급 편에서는 클래스와 리액트를 간단하게 다루고 있기 때문에 이 부분도 꼭 짚고 넘어가야 한다.

 

남은 고급편까지 깔끔하게 마무리해보자.