기록

zerocho js 3 본문

JS/zerocho - 웹게임강좌

zerocho js 3

mnmhbbb 2020. 8. 8. 16:55

3-1 window 객체

콘솔창에 window 쳐보면 굉장히 많은 속성들이 나옴. 브라우저가 기본적으로 제공하는 것들임

window.document (혹은 window['document']) 를 입력하면 #document가 뜨는데 여기에 마우스를 대면 보이는 화면이 파란색으로 선택되는 것을 알 수 있음

즉, 화면을 담당하는 객체가 document
브라우저 전체를 담당하는 객체는 window

쉽게 말해, window는 브라우저
document는 페이지(탭)이라고 생각하자.

 

+) TCP school 설명 첨부

Window 객체
window 객체는 웹 브라우저의 창(window)을 나타내는 객체로, 대부분의 웹 브라우저에서 지원하고 있습니다.

자바스크립트의 모든 객체, 전역 함수, 전역 변수들은 자동으로 window 객체의 프로퍼티가 됩니다.
window 객체의 메소드는 전역 함수이며, window 객체의 프로퍼티는 전역 변수가 됩니다.

(예를 들어, 

var a = 'b';
window.a; // 'b'

이렇게 전역 변수는 전역 객체의 속성이 됨
함수 안에 있을 때는 안됨! 전역 변수가 아니니까.

예를 들어,

function 함수() {
   var a = 'b';
}
window.a; //undefined

문서 객체 모델(DOM)의 요소들도 모두 window 객체의 프로퍼티가 됩니다.

window 객체의 모든 메소드나 프로퍼티를 사용할 때는 window라는 접두사를 생략할 수 있습니다.

 

순수하게 화면부분은 document, 브라우저 전체는 window
함수 안은 local, 바깥은 global.
변수도 마찬가지로 전역과 지역이 있다.
함수 스코프에 주의해야한다.

자바스크립트를 실행시켜주는 매개체는 크게 두 가지다. node와 browser

 

 

3-2 document객체와 DOM

암튼 아까 만든 #document를 클릭하면 html 태그들이 나옴
html이랑 JS는 다른 언어임
그래서 통역사가 필요한데 그게 이 document임

console.dir(document); 을 하면

아까랑 다르게 객체 형식으로 나옴

속성:값 이런 형식으로..!

 

그래서

DOM객체란 (document object model)

html과 JS 이 다른 두 언어의 통역사 역할을 하는 것.

document를 object처럼 표현하는 것.. 

(console.dir로 객체들을 로딩하는 기능을 함. 객체 형식으로 볼 수 있음)

 

3-3 script 사용법

이제부터는 콘솔 대신 파일에 코딩할거임

이거는 내가 이미 많이 공부한 부분이지

html 파일 안 body 태그 제일 아래에 

<script src='웅앵웅.js'></script>

이거 알쥐

 

3-4 js로 html 태그 만들기

JS에서 document.body를 하면 html의 body부분이 선택 됨
이런 방식으로다가 여러가지 할 수 있는데, document 객체의 메서드를 사용하여 html을 만들 수 있음

예를 들어,

<body>
    <div>이얏호옹</div>
</body>

이런 div 태그를 넣고 싶다면, JS에서 이러한 메소드를 이용해서 하면 됨

var 야통 = document.createElement('div'); //태그 만들기 변수선언
document.body.append(야통); //바디에 해당 변수 넣기
야통.textContent = '이얏호옹'; //텍스트 넣어주기

저 한 줄을 JS로 넣으려면 세줄이나 필요한거임;;

 

 

3-5 끝말잇기 화면에 표시

이전 강의에서 만든 반복문을 이용한 끝말잇기가 아닌 이벤트리스너로 만들어볼거임.

var 입력창 = document.createElement('input');
document.body.append(입력창);

var 버튼 = document.createElement('button');
버튼.textContent = '입력';
document.body.append(버튼);

var 결과창 = document.createElement('div');
document.body.append(결과창);


버튼.addEventListener('click', function() {
   if ( 야통.textContent[야통.textContent.length - 1] === 입력창.value[0] ) {
       결과창.textContent = '딩동댕';
       야통.textContent = 입력창.value;
       입력창.value = '';
    } else {
       결과창.text.Content = '땡';
        입력창.value = '';
    }
  } 
);

*함수의 이름이 없어도 됨.

**입력창.value 인 이유는, input의 텍스트값이 없으니까.

 

 

3-6 이벤트리스너 맛보기

아까 만든 게 좋긴 한데,

사용자 편의상 굳이 마우스로 클릭하는 것보단

키보드로 단어 친 후 엔터를 치는 게 편하겠지

글구 다시 입력창에 마우스를 대야 커서가 생김.. 이 문제를 해결해보기로.

 

입력창.focus();
포커스 함수를 넣어주면 알아서 커서가 입력창으로 포커스 됨.

버튼.addEventListener('click', function() {
   if ( 야통.textContent[야통.textContent.length - 1] === 입력창.value[0] ) {
       결과창.textContent = '딩동댕';
       야통.textContent = 입력창.value;
       입력창.value = '';
       입력창.focus();
    } else {
       결과창.text.Content = '땡';
        입력창.value = '';
        입력창.focus();
    }
  } 
);

 

글구 엔터를 넣으려면 form 태그가 필요함

그래서 input, button을 form 안에 넣어주려고 함

기존의 document.body.append();를

var = document.createElement('form');

.append(버튼);

이런 식으로 바꿔줌!

 

글구 여기서 중요한 건

버튼.addEventListner 부분을

폼.addEventListener('submit', function 콜백함수(이벤트) { } )

이렇게 바꿔주면 엔터 기능이 생기지만

submit은 기본적으로 새로고침하는 기본 동작을 갖고 있어서

그 기본동작을 막기 위해

이벤트.preventDefault();를 

콜백함수 맨위에 넣어준다! 끝.

만든 결과물

 


3-7 구구단 화면 만들기

아까와 마찬가지로 선언할 것 해주고 이벤트리스너를 이용한다.
이벤트리스너 함수 안에서는 아까랑 비슷하게 if문으로 한다.

 

숫자1, 숫자2 똑같이 만들어주고

문제 만들고

아까 사용한 폼 입력창 버튼들 그대로 사용함!

 

쬐끔 복잡스..

 

if ( ) {

  딩동댕;

  focus();

  .value='';

  다시 숫자1,2랑 둘 곱한 값 넣어주고

  그 랜덤 숫자를 곱해서 만든 문항도 넣어줘야 함!

  (String(숫자1) + "x" + String(숫자2) 이거)

 

<Full ver>

var a = Math.ceil(Math.random() * 9) + 1;
var b = Math.ceil(Math.random() * 9) + 1;
var axb = a * b;

var quiz = document.createElement("div");
quiz.textContent = String(a) + "x" + String(b) + "=?";
document.body.append(quiz);

var group = document.createElement("form");
document.body.append(group);

var answer = document.createElement("input");
group.append(answer);

var button = document.createElement("button");
button.textContent = "입력";
group.append(button);

var message = document.createElement("div");
document.body.append(message);

group.addEventListener("submit", function callback(e) {
  e.preventDefault();
  if (axb === Number(answer.value)) {
    message.textContent = "딩동댕";
    answer.focus();
    answer.value = "";
    a = Math.ceil(Math.random() * 9) + 1;
    b = Math.ceil(Math.random() * 9) + 1;
    axb = a * b; 
    quiz.textContent = String(a) + "x" + String(b) + "=?";
  } else {
    message.textContent = "땡";
    answer.focus();
    answer.value = "";
  }
});

'JS > zerocho - 웹게임강좌' 카테고리의 다른 글

틱택토  (0) 2021.01.26
zerocho js 6 - 로또추첨기  (0) 2020.11.04
숫자야구 연습  (0) 2020.08.12
zerocho js 4  (0) 2020.08.09
zerocho js 1,2강  (9) 2020.08.02
Comments