웹 브라우저에서 사용자가 화면을 클릭 하거나, 키보드를 클릭하거나 하는 다양한 일들이 일어납니다. 이러한 일들을 이벤트(Event)라고 부릅니다.
용어
이벤트 이름 : 이벤트의 이름을 나타냅니다.
이벤트 속성 : 특정 요소(태그)에 이벤트를 직접 연결할 때 활용하는 속성을 나타냅니다.
이벤트 리스너 또는 핸들러 : 특정 요소(태그)의 이벤트 속성에 연결한 함수를 나타냅니다.
디폴트 이벤트 : 요소(태그)가 가지고 있는 기본적인 이벤트를 나타냅니다. 예로 'a 태그를 클릭하면 href 속성에 정의한 곳으로 이동한다.' 등이 있습니다.
이벤트 모델 : 이벤트를 연결하는 방법을 나타냅니다. 최신 웹 브라우저는 '표준 이벤트 모델', '인라인 이벤트 모델', '기본 이벤트 모델'을 지원하지만, 구버전의 인터넷 익스플로러는 '마이크로소프트 인터넷 익스플로러 이벤트 모델', '인라인 이벤트 모델', '기본 이벤트 모델'을 지원합니다. 따라서 모든 웹 브라우저에서 정상적으로 이벤트를 사용할 수 있게 하려면 구버전과 최신 버전의 차이를 보완하는 방법이 필요합니다.
이벤트 종류
이벤트는 키보드를 이용해 버튼을 입력하거나, 마우스 클릭과 같이 다른 것에 영향을 미치는 것을 의미합니다.
마우스 이벤트
키보드 이벤트
HTML 프레임 이벤트
HTML 입력 양식 이벤트
유저 인터페이스 이벤트
구조 변화 이벤트
터치 이벤트
이벤트 관련 용어 정리
window 객체의 load 이벤트
window.onload = function() {};
이렇게 window 객체의 onload 속성에 함수 자료형을 할당하는 것을 '이벤트를 연결한다'고 합니다.
이때 load를 이벤트 이름 또는 이벤트 타입(Event Type)이라고 하며 onload를 이벤트 속성이라고 합니다. 또한 이벤트 속성에 할당한 함수를 이벤트 리스너(Event Listener) 또는 이벤트 핸들러(Event Handler)라고 합니다.
이벤트 용어 연습 예
<h1 id="header">Header</h1>
window.onload = function() {
var header = document.getElementById('header');
function whenClick() {
alert('click');
}
header.onclick = whenClick;
}
두 가지 이벤트를 연결했습니다. window 객체는 전과 같으며 header 객체의 이벤트 이름은 click, 이벤트 속성은 onclick, 이벤트 리스너는 whenClick() 함수 입니다.
header 객체
이벤트 이름 : click
이벤트 속성 : onclick
이벤트 리스너 : whenClick() 함수
문서 객체에 이벤트를 연결하는 방법을 이벤트 모델이라고 합니다. 이벤트 모델은 아래처럼 DOM Level 단계에 따라 두 가지로 분류할 수 있고, 다시 두 가지로 각각 나뉩니다. 따라서 총 네 가지 방법으로 이벤트를 연결할 수 있습니다.
DOM Level 0 - 인라인 이벤트 모델 - 기본 이벤트 모델
DOM Level 2 - 마이크로소프트 인터넷 익스플로러 이벤트 모델 - 표준 이벤트 모델
이 방법은 웹 표준에서 정의하거나 웹 브라우저가 지원하는 태그의 속성에만 사용할 수 있습니다. 그렇지 않다면 이 방법을 사용할 수 없습니다. 예를 들어 SVG 태그는 웹 브라우저에서 이러한 방식을 지원하지 않기 때문에 이 방법을 사용할 수 없습니다. 웹 브라우저가 지원하지 않는 속성은 아래 표의 메서드를 사용해야 속성을 넣을 수 있습니다.
문서 객체의 속성 메서드
메서드
설명
setAttribute(name, value)
객체의 속성을 지정합니다.
getAttribute(name)
객체의 속성을 가져옵니다.
문서 객체의 속성 지정2 예
window.onload = function() {
var img = document.createElement('img');
img.setAttribute('src', './img/test.png');
img.setAttribute('width', 500);
img.setAttribute('height', 300);
// setAttribute() 메서드를 사용하지 않으면 불가능합니다.
img.setAttribute('data-property', 300);
document.body.appendChild(img);
}
위 코드에 data-property 속성은 이전 코드 방식으로는 넣을 수 없습니다.
문서 객체 3
위 문서 객체 1, 2는 노드를 만들고 연결하는 방법입니다. 일반적으로는 위 코드보다 더 쉬운 방법을 사용합니다.
바로 문서 객체의 innerHTML 속성을 사용하는 것입니다.
문서 객체의 innerHTML 속성은 아래처럼 태그의 내부를 의미하는 속성입니다.
문서 객체의 innerHTML 속성
innerHTML 속성은 아래 코드처럼 사용합니다. 문자열을 선언하고 body 문서 객체의 innerHTML 속성에 넣기만 하면 문서 객체를 생성해줍니다.
만약 화면에 문자열 '<h1>document object model</h1>'을 화면에 그대로 출력하고 싶은 경우에는 innerHTML에 <h1>document object model</h1>를 적으면 되지만 복잡하고 귀찮기 때문에 textContent 속성을 사용합니다.
요소 노드란 HTML 태그를 의미하고, 텍스트 노드는 요소 노드 안에 들어 있는 글자를 의미합니다.
위 코드의 문서 객체 모델
문서 객체 모델
웹 페이지가 처음 HTML 페이지에 적혀 있는 태그들을 읽으며 생성하는 것을 '정적으로 문서 객체를 생성한다'라고 표현합니다. 페이지에 적혀 있는 내용을 특별한 변화 없이 생성해 붙은 이름입니다. 반면에 자바스크립트로 원래 HTML 페이지에는 없던 문서 객체를 생성하는 것을 '동적으로 문서 객체를 생성한다'라고 표현합니다.
웹 브라우저는 음악을 재생하는 기능, 동영상을 재생하는 기능, 그림을 그리는 기능, 미디어를 제어하는 기능, 사용자 카메라를 다루는 기능, 게임 패드를 다루는 기능 등도 제공하며, 자바스크립트를 사용하면 이런 기능들을 모두 활용할 수 있습니다. 이러한 기능을 웹 API라고 부릅니다.
HTML5부터는 플래시와 같은 플러그인을 사용하지 않아도 audio 태그를 사용해서 음악을 재생할 수 있게 되었습니다. (단, 음악 재생은 HTML5를 지원하는 웹 브라우저에서만 사용할 수 있습니다. 따라서 인터넷 익스플로러 8 이하의 웹 브라우저에서는 사용할 수 없습니다. )
Audio 객체 생성 1
var audio = new Audio('test.mp3');
Audio 객체는 위 코드처럼 생성합니다. Audio의 매개변수에는 audio 태그의 src 속성에 대응하는 문자열을 입력합니다.
src 속성을 지정해줄 필요 없이 아래 코드처럼 별도로 지정해도 됩니다.
Audio 객체 생성 2
var audio = new Audio();
audio.src = 'test.mp3';
Audio 객체의 기본 속성
속성
설명
src
재생하려는 음악 파일 경로
volume
음악의 음량
currentTime
음악의 현재 위치 ( 초 단위 )
Audio 객체의 기본 메서드
메서드
설명
play()
음악을 재생합니다.
pause()
음악을 일시 정지합니다.
Audio 객체에는 stop() 메서드가 없습니다. 음악을 정지하고 처음의 위치로 이동하고 싶을 때는 pause() 메서드를 사용하고 currentTime속성을 0으로 바꿔야 합니다.
핸드폰을 확인하는 방법은 크게 '서버에서 확인하는 방법'과 '클라이언트에서 확인하는 방법'이 있습니다. 두 가지 모두 userAgent를 확인하면 됩니다. userAgent 속성은 현재 웹 페이지를 실행하는 웹 브라우저의 정보를 나타냅니다.
userAgent 속성 확인
var userAgent = navigator.userAgent;
console.log(userAgent); // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
웹 브라우저의 userAgent 속성에는 브라우저를 구분할 수 있는 고유 문자열이 있습니다. 안드로이드는 Android, 아이폰이라면 iPhone을 쓰고 있다는 것을 알 수 있습니다.
키워드를 사용하면 모바일 장치를 구분할 수 있습니다.
iPhone: 아이폰
iPod: 아이팟
iPad: 아이패드
Android: 안드로이드
WebOS: 웹 OS
:: 카카오톡, 페이스북에서 링크를 클릭하면 KAKAOTALK등의 글자가 찍힙니다.
스마트폰 구분 예
var smartPhones = ['iphone', 'ipod', 'android'];
for(var i in smartPhones) {
if(navigator.userAgent.toLowerCase().match(new RegExp(smartPhones[i]))) {
console.log('스파트폰 페이지로 이동');
location = 'http://m.naver.com';
}
}
window.orientation 속성 ( 모바일 장치의 방향 )
window.orientation 속성은 모바일 장치에만 있는 속성으로 현재 모바일 장치의 방향을 나타냅니다.
위 코드를 실행하면 웹 브라우저마다 실행 결과가 조금씩 다릅니다. 속성만 출력하는 브라우저가 있고, 메서드까지 출력하는 브라우저가 있습니다.
location 객체의 속성
속성
설명
예
href
문서의 URL 주소
host
호스트 이름과 포트 번호
localhost:12345
hostname
호스트 이름
localhost
port
포트 번호
12345
pathname
디렉토리 경로
/myweb/
hash
앵커 이름(#~)
#beta
search
요청 매개변수
?page=test
protocol
프로토콜 종류
http:
location 객체의 메서드
속성
설명
assign(link)
현재 위치를 이동합니다.
reload()
새로고침합니다.
replace(link)
현재 위치를 이동합니다.
location 객체는 페이지를 이동할 때 많이 사용합니다. 아래 네 가지 방법으로 페이지를 이동할 수 있습니다. assign() 메서드와 replace() 메서드 모두 페이지를 이동하지만, replace() 메서드는 assign() 메서드와 다르게 뒤로 가기 버튼을 사용할 수 없다는 차이가 있습니다.
브라우저 객체 모델은 웹 브라우저와 관련된 객체의 집합( window, navigator, history, screen, document )으로 웹 브라우저 기능 요소를 직접 관리 / 제어할 수 있는 특별한 객체 모읍입니다.
:: 자바스크립트 프로그래밍 언어를 작동하게 하는 웹 브라우저라는 플랫폼이 제공하는 기능
참고자료
모질라 웹 API 문서 -> 바로가기 파이어폭스 웹 브라우저를 만든 모질라에서 제공하는 참고 자료입니다.
Dev Docs -> 바로가기 웹 브라우저에서 확인할 수 있는 참고 자료입니다. 자바스크립트를 포함한 모든 웹 개발과 관련된 문서를 제공합니다.
Zeal Docs -> 바로가기 오프라인 상태에서도 사용할 수 있는 윈도우, 리눅스 전용 참고 자료입니다. 자바스크립트를 포함해 대부분의 프로그래밍 언어, 프레임워크, 라이브러리와 관련된 문서를 제공합니다.
Kapeli -> 바로가기 오프라인 상태에서도 사용할 수 있는 맥 전용 참고 자료입니다. 자바스크립트를 포함한 모든 웹 개발과 관련된 문서를 제공합니다.
브라우저 관련 객체
브라우저 객체 모델( BOM, Browser Object Model )은 웹 브라우저와 관련된 객체의 집합을 의미합니다. 대표적인 브라우저 객체 모델로는 아래와 같으며, window,location, navigator, history, screen, document 객체가 있습니다.
브라우저 객체
간단하게 문서 객체 모델 ( DOM, Document Object Model )이라 통해서 부릅니다.