WEB #3 WEB UI
1. Window 객체
- window(전역객체)에 속한 메서드에는 경고창을 띄우는
alert
,setTimeout
등의 메서드가 있다.
window.setTimeout()
setTimeout() <!--window는 전역객체라서 생략 가능하다.-->
1.1. setTimeout의 활용 (지연시킬때 활용)
- 인자로 함수를 받는다. (자바스크립트는 함수를 인자로 받거나 반환하는 특징을 가진다.)
- Callback 함수 : 즉시 실행되지 않고 나중에 필요한 시점에 실행되거나 실행되지 않을 수도 있다.
function run() {
setTimeout(function() {
var msg = "hello codesquad";
console.log(msg); //이 메시지는 즉시 실행되지 않는다.
}, 1000); //1초뒤에 실행
}
run();
- setTimeout의 실행은 비동기(asynchronous)로 실행되어 동기적인 다른 실행이 끝나야 실행된다.
- setTimeout 안의 함수(callback 함수)는 run함수의 실행이 끝나고 나서 실행된다. (정확히는 stack에 쌓여있는 함수의 실행이 끝나고 나서 실행됨)
function run() {
console.log("start");
setTimeout(function() {
var msg = "hello codesquad";
console.log(msg); //이 메시지는 즉시 실행되지 않는다.
}, 1000);
console.log("end");
}
run();
//start
//end
//1초뒤 hello codesquad
setInterval과 setTimeOut
- setInterval은 특정 동작을 반복적으로 수행하기위해 쓰임
ex)- 갤러리 형식의 뷰를 만들어 이미지를 정해진 시간 간격으로 바꾸어 적용하는 경우
- 일정 시간 간격으로 배너광고를 바꾸면서 보여줄 경우
- 일정 주기로 계속해서 서버와 통신이 필요한 경우
- setTimeOut은 특정 동작을 다른 동작이 끝난 후 처리하기위해 쓰임
2. DOM과 querySelector
2.1. DOM (Document Object Model)
- 브라우저에서 HTML코드를 DOM 이라는 트리구조 객체형태의 모델로 정보들을 저장
⇒ 저장된 정보 : DOM Tree
(HTML element는 Tree 형태로 저장된다.) - DOM Tree를 탐색하고 조작하기 위한 JavaScript 탐색알고리즘 구현은 너무 힘들기 때문에 브라우저에서 다양한 DOM API(메서드)를 제공한다.
getElementByID()
- ID 정보를 통해서 element를 탐색하고 조작할 수 있게하는 DOM API
document.getElementByID("nav-cart-count);
document.getElementByID("nav-cart-count).innerText="있어";
document.getElementByID("nav-cart-count).style.display="none";
2.2. Element.querySelector()
- DOM을 찾는데 특히 유용하다.
- css selector문법을 활용하여 접근
document.querySelector("div");
document.querySelector("#nav-line-2"); //id 값 찾을때는 #
document.querySelector(".nav-line-2"); //class 값 찾을때는 .
document.querySelector(".nav-line-2 > .nav-arrow"); // 자식요소 찾을 때
querySelectorAll()
- ()에 div가 들어갈 경우 div인 모든 Element를 찾는다.
- 배열은 아니지만 노드 리스트라고 결과가 리스트 형태인 값이 나온다
- for문 같은 것을 돌려서 뭔가를 확인할 수 있다.
예시
- removeChild(child) : 삭제
- replaceChild(newChild, oldChild) : 대체
- appendChild(child) : 노드의 마지막 자식으로 주어진 엘리먼트 추가한다.
- document.createElement(tagname) : tagname 엘리먼트 노드를 추가한다.
- document.createTextNode(data) : 텍스트 노드를 추가한다.
3. Browser Event, Event Object, Event Handler
3.1. Event
- 브라우저에는 많은 이벤트가 있다(ex: 마우스 스크롤, 키보드 입력 등)
- HTML엘리먼트별로 어떤 이벤트(주로 키보드나 마우스 관련)가 발생했을 때 특정 행위를(어떤 일) 하고 싶다면, 대상엘리먼트를 찾고 어떤 일을 수행하도록 등록하면 된다.
3.2. Event Handler(Event Listner)
- 이벤트 등록시 :
addEventListner
함수를 사용한다.
var el = document.querySelector(".outside");
el.addEventListener("click", function(){
//이 함수는 이벤트가 발생할 때 실행된다. ⇒ Event Handler(Event Listner)
}, false);
3.3. Event Object
- 브라우저는 이벤트 리스너를 호출할 때, 사용자로부터 어떤 이벤트가 발생했는지에 대한 정보를 담은 이벤트 객체를 생성해서 리스너 함수에 전달한다.
⇒ 이벤트리스너 안에서는 이벤트객체를 활용해서 추가적인 작업을 할 수 있게 됨
var el = document.querySelector(".outside");
el.addEventListener("click", function(evt){
var target = evt.target; //매개변수 evt를 통해서 target에 접근하고 정보를 가져올 수 있다.
console.log(target.className, target.nodeName);
console.log(target.innerText);
});
4. Ajax 통신
4.1. Ajax (XMLHTTPRequest 통신)
- 브라우저 새로고침 없이 서버로부터 데이터를 받는 것이 좋겠다는 생각에서 출발
- 비동기적으로 (화면의 다른 부분에 영향을 주지 않고)데이터를 서버에서 가져오는 방식
- EX) Nav Bar의 탭을 누를 때마다 컨텐츠가 달라질 때, 누르지도 않은 탭의 컨텐츠까지 초기로딩시점에 모두 불러온다면 초기로딩속도에 영향을 줄 것이기에 동적으로 필요한 시점에 컨텐츠를 받아와서 표현하면 더 좋은 상황일 때 Ajax기술을 활용한다.
(새로 고침 없이 전체 웹페이지에서 일부분만 받아온 데이터로 갱신) - Ajax 통신으로는 XML, Plain Text, JSON 등 다양한 포맷의 데이터를 주고받을 수 있지만, 일반적으로 사용이 편리한 JSON포맷으로 데이터를 주고 받는다
JSON(JavaScript Object Notation)
- 서버와 클라이언트간의 데이터 교환을 할 때 상호간의 표준적인 데이터 포맷을 결정하기 위해서 JSON 포맷을 사용한다.
- AJAX를 위한 대표적인 포맷
- javascript Object와 같은 형태
//JSON의 형태 : 일반적으로 키-값(이름:값) 쌍의 패턴으로 표현된다.
{
"이름": "홍길동",
"나이": 25,
"성별": "여",
"주소": "서울특별시 양천구 목동",
"특기": ["농구", "도술"],
"가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"},
"회사": "경기 수원시 팔달구 우만동"
}
4.2. AJAX 실행코드
function ajax(data) {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", function() {
console.log(this.responseText);
});
oReq.open("GET", "http://www.example.org/getData?data=data");//parameter를 붙여서 보낼수있음.
oReq.send();
}
- XMLHttpRequest객체를 생성해서, open메서드로 요청을 준비하고, send메서드로 서버로 보낸다.
- 요청처리가 완료되면(서버에서 응답이 오면) load이벤트가 발생하고, 콜백함수가 실행된다.
- 콜백함수가 실행될 때(로드가 시작될 때)는 이미 ajax함수는 반환하고 콜스택에서 사라진 상태입니다. (setTimeout함수의 콜백함수의 실행과 유사하게 동작하는 '비동기'로직)
CORS: Cross-Origin Resorce Sharing
- 한 출처에서 실행 중인 웹어플리케이션이 다른 origin의 리소스에 접근할 수 있도로 하는 메커니즘.
- XMLHttpRequest는 사용 중인 웹어플리케이션이 자신과 출처가 동일한 리소스만 불러올 수 있고, 다른 출처의 리소스를 불러오기 위해서는 CORS헤더를 포함한 응답을 반환해야 함.
참고 : https://huns.me/posts/2014-04-20-ajax-cors-overview
5. JavaScript 브라우저 디버깅
5.1. 디버깅 컨트롤
- Pause, Continue : 첫 번째 버튼은 평소에는 Pause 버튼 상태인데 브렉포인트가 잡힌 상태에선 Continue 버튼이 된다. 다른 브레이크포인트가 잡힐 때까지 코드를 진행
- Step over next function call : 스텝 오버는 코드 라인을 한 스탭 진행하는데 현재 실행 라인에 함수 실행 코드가 있다면 함수는 실행하는데 이때 함수 안의 코드로는 진입하지 않는다. 라인의 함수를 실행만 한다.
- Step into next function call : 스텝 인투는 스텝 오버와 다르게 현재 실행 라인의 코드에 함수가 있다면 함수 안의 첫 번째 코드로 진입해 들어가 다시 하나씩 라인별로 코드를 실행할 수 있다.
- Step out of current function : 스텝 인투로 들어온 함수를 끝까지 실행하고 밖으로 빠져나와 해당 함수를 실행한 함수로 돌아간다.
- Active/Deactive breakpoint : 브레이크포인트를 끄거나 켤 수 있다.
- Pause on exception : 자바스크립트 예외가 발생하면 해당 위치에 브레이크포인트를 잡아준다.
Author And Source
이 문제에 관하여(WEB #3 WEB UI), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@j20park/WEB-3-WEB-UI저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)