HTML5에서 새롭게 추가된 API는 모두 자바스크립트로 구현되어 있다. 그러므로 본 내용을 이해하기 위해서는 자바스크립트에 대한 기초 지식이 필요하다.
Geolocation
geolocation API
geolocation API는 사용자의 현재 위치 정보를 가져올 때 사용하는 자바스크립트 API이다. 사용자의 위도 및 경도에 관한 정보는 자바스크립트를 이용해 웹 서버로 전송된다.
이것을 이용하면 사용자의 위치를 지도에 표시하거나, 사용자 근처의 상점을 찾아주는 등의 위치기반 서비스를 할 수 있다. 하지만 이러한 정보는 사용자의 사생활을 침해할 가능성이 높으므로, 사용자의 동의 없이는 사용할 수 없도록 하고 있다.
geolocation API를 지원하는 주요 웹 브라우저의 버전은 다음과 같다.
API |
ie |
chrome |
firefox |
safari |
opera |
geolocation |
9.0 |
5.0 - 49.0 (http) / 50.0 (https) |
3.5 |
5.0 |
16.0 |
크롬 50.0 버전부터는 https와 같은 보안 프로토콜에서만 geolocation API가 동작하도록 허용하고 있습니다.
getCurrentPosition() 메소드
getCurrentPosition() 메소드를 이용하면 사용자의 위치에 대한 위도와 경도값을 얻을 수 있다. 이 메소드의 첫 번째 인수로는 가져온 사용자의 위치 정보를 출력하는 함수가 들어간다.
예제
function findLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showYourLocation);
} else {
loc.innerHTML = "이 문장은 사용자의 웹 브라우저가 Geolocation API를 지원하지 않을 때 나타납니다!";
}
}
이 메소드의 두 번째 인수로는 위치 정보에 관한 오류를 처리하는 함수가 들어간다.
예제
function showErrorMsg(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
loc.innerHTML = "이 문장은 사용자가 Geolocation API의 사용 요청을 거부했을 때 나타납니다!"
break;
case error.POSITION_UNAVAILABLE:
loc.innerHTML = "이 문장은 가져온 위치 정보를 사용할 수 없을 때 나타납니다!"
break;
case error.TIMEOUT:
loc.innerHTML = "이 문장은 위치 정보를 가져오기 위한 요청이 허용 시간을 초과했을 때 나타납니다!"
break;
case error.UNKNOWN_ERROR:
loc.innerHTML = "이 문장은 알 수 없는 오류가 발생했을 때 나타납니다!"
break;
}
}
이처럼 가져온 사용자의 위치 정보를 구글 맵을 통해 표시할 수 있다.
예제
function showYourLocation(position) {
var userLat = position.coords.latitude;
var userLng = position.coords.longitude;
var imgUrl = "http://maps.googleapis.com/maps/api/staticmap?center=" + userLat + "," + userLng + "&zoom=15&size=500x400&sensor=false";
document.getElementById("mapLocation").innerHTML = "<img src='"+imgUrl+"'>";
}
위의 예제처럼 단순한 이미지로 표시하는 것이 아닌 구글 맵 스크립트를 이용한 연동도 가능하다.
예제
function showYourLocation(position) {
var userLat = position.coords.latitude;
var userLng = position.coords.longitude;
var userLocation = new google.maps.LatLng(userLat, userLng);
loc = document.getElementById("mapLocation");
loc.style.width = '500px';
loc.style.height = '400px';
var mapOptions = {
center: userLocation,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false,
navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}
}
var map = new google.maps.Map(loc, mapOptions);
var marker = new google.maps.Marker({position:userLocation,map:map,title:"여기가 현재 위치입니다!"});
}
geolocation API 메소드
Method |
설명 |
getCurrentPosition() |
사용자의 현재 위치를 가져옴. |
watchPosition() |
사용자의 현재 위치를 가져오고 나서, 사용자의 움직임에 따라 지속적으로 위치 정보를 갱신함. |
clearWatch() |
watchPosition() 메소드의 실행을 중지함. |
getCurrentPosition() 메소드의 반환값
속성 |
반환값 |
coords.latitude |
소수로 표현된 위도 값 |
coords.longitude |
소수로 표현된 경도 값 |
coords.accuracy |
위도 값과 경도 값의 정확도 |
coords.altitude |
평균 해수면을 기준으로 하는 고도 값(해발) |
coords.altitudeAccuracy |
고도 값의 정확도 |
coords.heading |
북쪽을 기준으로 현재 진행 방향에 대한 시계방향으로의 각도 값(˚) |
coords.speed |
초당 이동한 미터 수를 나타내는 속도 값(초속) |
timestamp |
위치 정보를 가져온 시간을 나타냄. |
Drag and Drop
드래그 앤 드롭(drag and drop) API
드래그 앤 드롭 API는 웹 페이지 내의 요소를 사용자가 자유롭게 드래그할 수 있도록 설정해준다. HTML5 이전에 이와 같은 기능을 구현하기 위해서는 엄청나게 많고 복잡한 스크립트를 작성해야 했다. 하지만 HTML5에서는 드래그 앤 드롭(drag and drop) 기능이 표준 권고안에 포함되어 간단하게 사용할 수 있게 되었다. 현재 주요 웹 브라우저들은 모두 이 기능을 지원하며, 따라서 웹 페이지 내의 모든 요소는 드래그될 수 있다.
드래그 앤 드롭 API를 지원하는 주요 웹 브라우저의 버전은 다음과 같다.
API |
ie |
chrome |
firefox |
safari |
opera |
드래그 앤 드롭 |
9.0 |
4.0 |
3.5 |
6.0 |
12.0 |
드래그 앤 드롭 이벤트
마우스로 객체(object)를 드래그해서 놓을 때까지 여러 단계의 이벤트가 순차적으로 발생하게 된다.
다음 표는 드래그 앤 드롭시 일어나는 이벤트를 순서대로 보여준다.
이벤트 |
설명 |
dragstart |
사용자가 객체(object)를 드래그하려고 시작할 때 발생함. |
dragenter |
마우스가 대상 객체의 위로 처음 진입할 때 발생함. |
dragover |
드래그하면서 마우스가 대상 객체의 위에 자리 잡고 있을 때 발생함. |
drag |
대상 객체를 드래그하면서 마우스를 움직일 때 발생함. |
drop |
드래그가 끝나서 드래그하던 객체를 놓는 장소에 위치한 객체에서 발생함. |
dragleave |
드래그가 끝나서 마우스가 대상 객체의 위에서 벗어날 때 발생함. |
dragend |
대상 객체를 드래그하다가 마우스 버튼을 놓는 순간 발생함. |
드래그 앤 드롭 이벤트를 위한 모든 이벤트 리스너 메소드(event listener method)는 DataTransfer 객체를 반환한다.
이렇게 반환된 DataTransfer 객체는 드래그 앤 드롭 동작에 관한 정보를 가지고 있게 된다.
draggable 속성
웹 페이지 내의 모든 요소는 draggable 속성을 사용하여 드래그될 수 있는 객체(draggable object)로 변환될 수 있다.
ondragstart 속성
드래그될 수 있는 객체로 만든 후에는 ondragstart 속성을 통해 DataTransfer 객체의 setData() 메소드를 호출한다.
setData() 메소드는 드래그되는 대상 객체의 데이터(data)와 타입(data type)을 설정한다.
ondragover 속성
ondragover 속성은 드래그되는 대상 객체가 어느 요소 위에 놓일 수 있는지를 설정한다.
기본적으로 HTML 요소는 다른 요소의 위에 위치할 수 없다.
따라서 다른 요소 위에 위치할 수 있도록 만들기 위해서는 놓일 장소에 있는 요소의 기본 동작을 막아야만 한다.
이 작업을 event.preventDefault() 메소드를 호출하는 것만으로 간단히 설정할 수 있다.
ondrop 속성
드래그하던 객체를 놓으면 drop 이벤트가 발생합니다.
ondrop 속성을 이용하여 drop 이벤트에 대한 동작을 설정할 수 있다.
예제
function dragEnter(ev) { ev.preventDefault(); }
function drag(ev) { ev.dataTransfer.setData("text", ev.target.id); }
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
Web Storage API
웹 스토리지 API는 기존 쿠키(cookie)의 문제점을 극복하기 위해 웹 브라우저가 직접 데이터(data)를 저장할 수 있게 해준다.
HTML5 이전에는 응용 프로그램이 데이터를 서버에게 요청할 때마다 매번 쿠키(cookie)라는 곳에 그 정보를 저장한다.
하지만 웹 스토리지는 사용자 측에서 좀 더 많은 양의 정보를 안전하게 저장할 수 있도록 해준다.
웹 스토리지는 최소 5MB 이상의 많은 공간을 가지고 있으며, 이 정보는 절대 서버로 전송되지 않는다.
이러한 웹 스토리지는 오리진(origin)마다 단 하나씩만 존재한다.
오리진(origin)이란 도메인(domain)과 프로토콜(protocol)의 한 쌍으로 이루어진 식별자이다.
따라서 하나의 오리진에 속하는 모든 웹 페이지는 같은 데이터(data)를 저장하며 또한 같은 데이터에 접근할 수 있다.
웹 스토리지 API를 지원하는 주요 웹 브라우저의 버전은 다음과 같다.
API |
ie |
chrome |
firefox |
safari |
opera |
웹 스토리지 |
8.0 |
4.0 |
3.5 |
4.0 |
11.5 |
웹 스토리지 지원 여부 확인
웹 스토리지를 사용하기 전에, 우선 사용자의 웹 브라우저가 이를 지원하는지 안 하는지 확인해야 한다.
문법
if (typeof(Storage) !== "undefined") {
// web storage를 위한 코드 부분
} else {
// web storage를 지원하지 않는 브라우저를 위한 안내 부분
}
웹 스토리지 객체
웹 스토리지 API는 사용자가 데이터를 저장할 수 있도록 두 가지 객체를 제공한다.
- sessionStorage 객체 : 하나의 세션(session)만을 위한 데이터를 저장하는 객체
- localStorage 객체 : 보관 기한이 없는 데이터를 저장할 수 있는 객체
sessionStorage 객체
sessionStorage 객체는 하나의 세션(session)만을 위한 데이터를 저장한다.
따라서 사용자가 브라우저 탭이나 창을 닫으면 이 객체에 저장된 데이터는 사라진다.
예제
function clickCounter() {
if(typeof(Storage) !== "undefined") {
if (sessionStorage.clickcount) {
sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
sessionStorage.clickcount = 1;
}
document.getElementById("counter").innerHTML = "카운터의 현재 횟수는 " + sessionStorage.clickcount + "입니다!";
}
}
localStorage 객체
localStorage 객체는 보관 기한이 없는 데이터를 저장한다. 따라서 브라우저 탭이나 창이 닫히거나, 컴퓨터를 재부팅 해도 저장된 데이터는 없어지지 않는다.
예제
function clickCounter() {
if(typeof(Storage) !== "undefined") {
if (localStorage.clickcount) {
localStorage.clickcount = Number(localStorage.clickcount) + 1;
} else {
localStorage.clickcount = 1;
}
document.getElementById("counter").innerHTML = "카운터의 현재 횟수는 " + localStorage.clickcount + "입니다!";
}
}
[세상살이] - 온라인에서 무료로 이미지, 동영상 용량 줄이기
[세상살이] - 윌리암 아돌프 부게로 (William Adolph Bouguereau)
'코딩공부' 카테고리의 다른 글
CSS 폰트 (0) | 2020.10.13 |
---|---|
CSS 선택자 (0) | 2020.10.12 |
CSS 기본 (0) | 2020.10.12 |
HTML5 API 2 (0) | 2020.10.06 |
HTML5 그래픽 2 (0) | 2020.10.06 |
HTML5 그래픽 1 (0) | 2020.10.05 |
HTML5 멀티미디어 (0) | 2020.10.05 |
HTML5 기본정리 2 (0) | 2020.10.03 |
댓글