본문 바로가기
개발/Javascript

[js] 자바스크립트로 구구단 구현하기(순수 자바스크립트/ vue.js)

by 코딩하는 갓디노 2020. 12. 12.

 

자바스크립트를 이용하여,
구구단을 구현하는 예제입니다.



 

 

 

 

예제는 인프런의 제로초, "조현영"님의 강의를 들으면서 공부한 내용입니다.

 

구현 방법
1. 순수 자바스크립트
2. vue.js

 

화면 결과

 

1. 순수 자바스크립트

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <script>
        //1. 변수 선언
        let num1 = Math.ceil(Math.random() * 9);
        let num2 = Math.ceil(Math.random() * 9);
        let answer = num1 * num2;

        //2. 화면 구성
        //제목
        let title = document.createElement('h1');
        title.textContent = '구구단';
        document.body.append(title);

        //문제: x 곱하기 x 는?
        let word = document.createElement('div');
        word.textContent = `${num1} 곱하기 ${num2}는?`
        document.body.append(word);

        //정답 form 
        let form = document.createElement('form');
        document.body.append(form);
        let input = document.createElement('input');
        form.append(input);

        //정답 입력 후 확인 버튼
        let btn = document.createElement('button');
        btn.textContent = "클릭"
        form.append(btn);

        //결과
        let result = document.createElement('div');
        document.body.append(result);

        //3. form 이벤트리스너 함수
        form.addEventListener('submit', function(event) {
            //console.log(input.value, answer);
            event.preventDefault();
            if (Number(input.value) === answer) { //Number를 이용하여 string을 number로 변환
                result.innerHTML = "딩동댕";
                //문제 새로 내기
                num1 = Math.ceil(Math.random() * 9);
                num2 = Math.ceil(Math.random() * 9);
                word.textContent = `${num1} 곱하기 ${num2}는?`
                answer = num1 * num2;

                input.value = '';
                input.focus();
            } else {
                result.innerHTML = "땡";
                input.value = '';
                input.focus();
            }
        });
    </script>
</body>

</html>

 

2. vue.js

간단한 구현 내용으로 vue.js cdn을 설치하였습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script> //vue.js cdn설치
</head>

<body>
    <div id="app">
        <h1>구구단</h1>
        <div> {{ num1 }} 곱하기 {{ num2 }} 는?</div>
        <form @submit.prevent="checkFn">
            <input type="text" v-model="value" ref="input" /> 
            //focus() 처리를 위하여 ref 사용
            <button>결과</button>
        </form>
        <div>{{result}}</div>
    </div>

    <script>
        var app = new Vue({
            el: '#app',
            data: {
                num1: Math.ceil(Math.random() * 9), //1-9까지 랜덤 숫자
                num2: Math.ceil(Math.random() * 9), //1-9까지 랜덤 숫자
                value: "",
                result: "",
            },
            methods: {
                checkFn() {
                    if (this.num1 * this.num2 === parseInt(this.value)) {
                        this.result = "딩동댕"
                        this.value = ""
                        this.$refs.input.focus();	//$refs.ref이름으로 focus() 사용
                        this.num1 = Math.ceil(Math.random() * 9);
                        this.num2 = Math.ceil(Math.random() * 9);
                    } else {
                        this.result = "땡"
                        this.value = ""
                        this.$refs.input.focus();
                    }
                }
            }
        })
    </script>
</body>

</html>




 

 

 

parseInt()

 

String을 Number 타입으로 바꾸는 함수 입니다.
타입을 바꾸기 위해 Number() 또는 String()을 사용하기도 합니다.

parseIng() 예제

parseInt("10"); // 10
parseInt("-10") // -10
parseInt("10.5"); // 10
parseInt(" 10"); // 10
parseInt("10 "); // 10
parseInt("k10"); // NaN
parseInt(""); // NaN

vue.js의 예제에서
console.log(typeof (this.num1 * this.num2), this.value) 로 확인을 해보면
결과는 this.num1 * this.num2는 number, this.value는 string 입니다.
parseInt()로 this.value를 Number로 변환 시켜주었습니다.

반응형

댓글