본문 바로가기
  • Welcome to Smart-i
  • I can do it!
  • Those who come, be rich.
코딩공부

HTML5 API 1

by ~~~~~하이글로시~~~~~ 2020. 10. 6.

html5 api 1

 

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 + "입니다!";
    }
}

 

 

[세상살이] - 온라인에서 무료로 이미지, 동영상 용량 줄이기

 

온라인에서 무료로 이미지, 동영상 용량 줄이기

온라인에서 무료로 이미지, 동영상 용량 줄이기 사진이나 동영상 업로드 시 용량 제한에 걸릴때가 있다. 화질 변화는 없이 용량을 줄이고 싶을 때, 사진이나 동영상을 전문 프로그램을 사용하지

smarti.tistory.com

[세상살이] - 윌리암 아돌프 부게로 (William Adolph Bouguereau)

 

윌리암 아돌프 부게로 (William Adolph Bouguereau)

William Adolph Bouguereau (1825~1905) 부게로는 1825년 프랑스 라로셀(La Rochelle)에서 태어나 1905년 같은 곳에서 사망하였다. 주로 고전적이고 종교적인 주제로 그림을 그렸으며 19세기 후..

smarti.tistory.com

[세상살이] - 바다를 지배했던 역사 속 군함들

 

바다를 지배했던 역사 속 군함들

바다를 지배했던 역사 속 군함들 예로부터 해군력은 국력의 상징이었으며, 바다를 장악한 국가는 엄청난 부를 가질 수 있었다. 고대 포에니 전쟁의 퀸퀴어림은 로마가 승리하는데 많은 기여를

smarti.tistory.com

[코딩공부] - CSS 선택자

 

CSS 선택자

CSS 선택자 선택자는 CSS에서 HTML의 특정 요소를 선택하기 위한 규칙으로, Selectors Level 3가 권고 표준안이며, 현재 Selectors Level 4가 개발 중에 있다. 특히 CSS3에서는 기존 CSS2.1에 비해 많은 선택자가.

smarti.tistory.com

[디자인공부] - 여기어때 잘난체 다운로드 및 설치

 

여기어때 잘난체 다운로드 및 설치

여기어때 잘난체 서체 다운로드 받기 잘난체는 여기어때의 BI 특징을 모티브로 하여 만들어졌다. 여기어때 BI의 가장 큰 특징인 기둥의 시작과 맺음을 그대로 서체에 녹여 내었으며 네모꼴의 꽉

smarti.tistory.com

 

'코딩공부' 카테고리의 다른 글

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

관련글

 

댓글