SlideShare a Scribd company logo
1 of 21
www.javaspecialist.co.kr
www.javaspecialist.co.kr
www.javaspecialist.co.kr
www.javaspecialist.co.kr
www.javaspecialist.co.kr
Geolocation API
내 위치를 알아본다.
www.javaspecialist.co.kr
www.javaspecialist.co.kr
위치 정보
window.navigator.geolocation
getCurrentPosition
watchPosition
Lab - 현재 위치 표시하기
www.javaspecialist.co.kr
1. Geolocation API (1/2)
• 사용자의 위치 정보를 얻기 위한 JavaScript API
– 관련 메서드는 window.navigator.geolocation 객체에 정의되어 있음(window. 생략 가능)
– 현재 위치 얻음(한번)
• navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options);
– 위치 정보 확인(계속)
• var watchId = navigator.geolocation.watchPosition(successCallback, errorCallback,
options);
• successCallback 함수에 전달되는 위치 정보(position)
위치정보 속성 coords 속성 설명
coords
latitude 위도
longitude 경도
altitude 표고
accuracy 위도, 경도의 오차 (단위와 오차)
altitudeAccuracy 표고의 오차 (단위와 오차)
heading Device 의 진행 방향. 북쪽을 기준으로 한 시계방향의 각도로 나타냄
speed Device 의 진행 속도(미터/초). (이용할 수 없을 때는 null)
timestamp 위치정보를 얻은 시각(1970년 1월 1일 부터의 millisecond)
www.javaspecialist.co.kr
1. Geolocation API (2/2)
• errorCallback 함수에 전달되는 객체에 담겨있는 속성과 상수
• options에 지정할 수 있는 정보
속성/상수 설명
enableHighAccuracy 정확도가 높은 위치 정보를 요청
timeout
위치 정보 확인에 시간제한을 설정.
시간제한을 초과하면 TIMEOUT error 발생
maximumAge
위치정보의 유효기간을 설정.
0 을 지정하면 항상 새로운 위치정보를 요청함
속성/상수 설명
code Error Code
UNKNOWN_ERROR 알 수 없는 Error (Error code 값 : 0)
PERMISSION_DENIED 권한 없음 Error (Error code 값 : 1)
POSITION_UNAVAILABLE 위치정보를 얻을 수 없음 (Error code 값 : 2)
TIMEOUT 시간제한 초과 (Error code 값 : 3)
message Error Message
www.javaspecialist.co.kr
Lab
• Geolocation API로 현재 내 위치를 브라우저에 표시함
• Google Maps에 관심장소(Map Marker)로 표시
– watchPosition()을 이용, 위치정보가 변할 때마다 관심장소 표시
• 브라우저에 지도를 나타내주기 위해 구글 JavaScript Map API이용
– https://developers.google.com/maps/
– Google Maps API는 버전3을 이용하므로 API 키가 없어도 예제 실행가능
– https://developers.google.com/maps/documentation/javascript/tutorial
www.javaspecialist.co.kr
Lab
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <meta charset="EUC-KR">
5. <title>Insert title here</title>
6. <style type="text/css">
7. #map{
8. width : 1024px;
9. height: 600px;
10. }
11. </style>
12. <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
13. <script src="myposition.js" defer></script>
14. </head>
15. <body>
16. <h1>현재 위치 추적</h1>
17. <button id="start">시작</button>
18. <button id="stop">중지</button>
19. <input type="checkbox" id="gps">GPS 사용
20. <div id="log"> </div>
21. <div id="map">
22. 지도를 로딩 중입니다...
23. </div>
24. </body>
25. </html>
www.javaspecialist.co.kr
Lab
1. //파일명 : myposition.js
2. (function() {
3. function log(msg){
4. var log = document.getElementById("log") || document.querySelector(".log");
5. if(log) log.innerHTML += msg + "<br>";
6. }
7.
8. window.onload = function(){
9. document.getElementById("start").onclick = function(){
10. //계속 위치 정보를 받고 싶을 때 watchPosition사용
11. //성공 시 success메서드, 실패 시 error메서드 호출
12. //maximumAge 위치정보의 유효 시간
13. watchId = window.navigator.geolocation.watchPosition(
14. success,
15. error,
16. {
17. enableHighAccuracy: document.getElementById("gps").checked,
18. timeout: 5000,
19. maximumAge: 0
20. }
21. );
22. };
23.
24. document.getElementById("stop").onclick = function(){
25. //TODO 위치 추적을 중지한다.
26. //watchPosition으로부터 리턴받은 id값을 인자로 제공함
27. window.navigator.geolocation.clearWatch(watchId);
28. };
29.
www.javaspecialist.co.kr
Lab
30. //TODO 구글맵을 불러옵니다.
31. //LatLng와 Map음 http://maps.google.com/maps/api/js에 정의된 클래스, 위도/경도를 가지고 있는 클래스
32. var center = new google.maps.LatLng(37.519768, 126.939769);
33. map = new google.maps.Map(document.getElementById("map"), {
34. mapTypeId: google.maps.MapTypeId.ROADMAP,
35. zoom:17,
36. center: center
37. });
38. };
39.
40. // 위치 확인 성공 시
41. function success(position){
42. //TODO 지도의 중앙을 현재 위치로 세팅한다. 위도, 경도 인자
43. var center = new google.maps.LatLng(
44. position.coords.latitude,
45. position.coords.longitude
46. );
47. map.setCenter(center);
48. //TODO 마커 표시
49. var marker = new google.maps.Marker({
50. position: center,
51. title: "내위치",
52. map: map
53. });
54. };
55. // 위치 확인 실패 시
56. function error(error){
57. log("조회 실패: " + error.code);
58. };
59. })();
www.javaspecialist.co.kr
www.javaspecialist.co.kr
Drag & Drop
www.javaspecialist.co.kr
www.javaspecialist.co.kr
draggable="true"
Drag & Drop
event.dataTransfer
www.javaspecialist.co.kr
1. Drag & Drop
• html 요소의 draggable 속성
– 드래그 대상 요소에 draggable 속성(true/false/값없음) 추가하여 드래그 & 드롭 기능을 사
용함
– draggable="true"
• event.dataTransfer 객체
– 드래그 & 드롭에 사용할 데이터를 저장하기 위한 객체
• event.dataTransfer 객체의 속성과 메서드
속성 값 설명
dropEffect
copy, move,
link, none
드래그 & 드롭 동작의 종류를 지정. copy, move, link, none 중 하나를 가짐.
effectAllowed number
허용할 dropEffect를 지정하는 문자열. copy, move, link, copyLink, linkMove, all 등으로
지정
types array setData를 호출 할 때 지정되는 포맷 문자열을 배열 형식으로 얻을 수 있음
files array 다른 애플리케이션으로부터 드래그 & 드롭 된 파일들을 가져올 수 있음
메서드 설명
clearData(type)
드래그 중인 데이터를 삭제함. 인수를 지정하여 특정 데이터 타입의 데이터만 삭제할 수
있음.
setData(type, data) 드래그 & 드롭 할 데이터를 저장. 타입은 MIME, Text, URL 또는 문자열로 지정 가능.
getData(type) 포맷을 지정하여 데이터를 가져옴
setDragImage(image, x, y) img 요소를 이용하여 드래그 중의 피드백(드래그 아이콘)을 지정. x, y는 표시 위치
addElement(element) 드래그 중 피드백 이미지에 추가할 요소를 지정한다.
www.javaspecialist.co.kr
2. 드래그 & 드롭 이벤트 핸들러 속성
이벤트 설명 사용
dragstart 요소를 드래그 시작할 때
DataTransfer에 데이터 넣습니다.
event.dataTransfer.setData("listItemId", event.target.id);
dragenter
드래그 중 마우스 포인터
가 요소와 겹칠 때
데이터의 드롭을 허용할 것인가 체크하는 코드를 넣을 수 있
다. 또는 드롭 영역의 스타일을 변경시킬 수도 있다.
dragover
드래그 중 마우스 포인터
가 요소 위를 가로지를 때
dragleave
드래그 중 마우스 포인터
가 요소 위를 벗어날 때
마우스가 드롭영역에서 벗어날 때 스타일을 변경시킬 수 있다.
drop 드롭 할 때
DataTransfer로부터 데이터를 꺼내 처리하는 코드를 포함한다.
getData() 메서드를 이용해서 데이터를 꺼낸다.
drag
드래그 대상 요소에 드래
그 중을 알림
dragend
드래그 대상 요소에게 드
래그 종료를 알림
www.javaspecialist.co.kr
3. 드래그 시작 요소의 이벤트 처리
• 드래그 시작 요소에서 이벤트 처리는 dragstart 이벤트를 사용
• 데이터를 저장하기 위한 dataTransfer 객체를 사용
function onDragStart(event) {
if(event.target.tagName.toLowCase() == "li") {
event.dataTransfer.setData("listItemId", event.target.id);
} else {
event.preventDefault();//드래그 대상이 li 요소가 아니면 처리하지 않음
}
}
www.javaspecialist.co.kr
4. 드롭 대상 요소의 이벤트 처리
• 드롭 대상 요소에서 처리할 수 있는 이벤트
• dragenter :
– 드래그 중 마우스 포인터가 대상 요소와 겹치는 순간 호출되는 이벤트.
• dragover :
– 드래그 중 마우스 포인터가 대상 요소 위를 가로지를 때 간헐적으로 발생하는 이벤트.
– 드롭되기 전에 event.preventDefault() 메서드를 통해 디폴트 이벤트 상태를 취소해야 함.
• drop :
– 드롭 처리를 실행할 때 발생하는 이벤트. 이 때 dataTransfer로부터 데이터를 꺼내어 처리.
– 드롭 요소를 포함하는 요소가 이벤트를 포함할 경우 이벤트가 끝난 후 이벤트가 부모 요소
에 전파되는 것을 방지하기 위해 stopPropagation() 메서드를 호출해야 함.
• 요소들이 디폴트 이벤트를 가지고 있을 때에는 드롭을 허용하지 않음
– 그럴 때에는 event.preventDefault() 를 통해 디폴트 이벤트 상태를 취소해야 함
www.javaspecialist.co.kr
www.javaspecialist.co.kr
File API
로컬의 파일을 읽을 수 있다.
www.javaspecialist.co.kr
www.javaspecialist.co.kr
FileReader
File
www.javaspecialist.co.kr
1. File
• File interface
– File interface 를 사용하면 File 의 File Name 이나 Size 등 기본적인 정보에 접근 할 수 있
음
– File interface는 File 선택 Form 이나 Drag & Drop 을 통해서 사용자가 직접 선택한 File에
한정됨
• File 객체 사용 예
– var file = document.getElementById("file").files[0];
– document.getElementById("fileName").textContent = file.name;
– document.getElementById("fileSize").textContent = "(" + file.size + "byte)";
• File Interface 속성과 메서드
Attribute/Method 설명
name File 이름
type File 의 MIME Type(알 수 없을 때는 null)
urn File 의 범용 식별자
size File Size
slice(start, length)
시작위치와 끝 위치를 지정하여 파일의 내용을 잘라내 새로운 Blob객체를 만
드는 함수
www.javaspecialist.co.kr
2. FileReader
• FileReader interface
– FileReader interface 는 비동기적인 상황에서 사용
– FileReader interface 는 File 의 내용을 읽을 수 있는 기능을 제공함.
• FileReader 생성
– var reader = new FileReader();
• FileReader Interface 속성과 메서드
Attribute/Method 설명
readAsBinaryString(fileBlob) File 내용을 읽어 Binary 문자열로 저장
readAsText(fileBlob, encoding)
File 내용을 읽어 들여 문자열로 저장, 두 번째 인수는 File 의 문자
encoding 을 지정할 수 있음(기본값 : UTF-8)
readAsDataURL(file) File 내용을 읽어 dataURL 형식의 문자열로 저장
result 읽은 File 내용
error error 발생시의 error 정보
onload 읽기 성공 했을 때 호출하는 event handler. load event 에 대응
onprogress
읽기 진행 상황을 얻을 수 있는 event handler. progress event 에 대
응
onerror 읽기 error 시에 호출되는 event handler. error event 에 대응.
www.javaspecialist.co.kr
3. Error Code
• 파일을 읽을 때 발생하는 에러 코드
상수 Code 설명
NOT_FOUND_ERR 1 읽을 File 을 찾지 못할때
SECURITY_ERR 2
Web Application 이 Access 하기에 안전하지 못한 File일 때
File 에 너무 많은 읽기 호출이 있을 때
사용자의 선택한 이후에 File 에 변경이 있을 때 사용할 수 있음
ABORT_ERR 3 abort() 함수 호출과 같은 것으로 인해 읽기가 중지되었을 때
NOT_READABLE_ER
R
4 File 접근 권한 문제와 같은 것으로 인해 File 을 읽지 못할때
ENCODING_ERR 5
동기적, 비동기적으로 readAsText() 함수를 사용할 때는 사용할 수 없
음
DataURL 로 표현될 수 있는 File 이나 Blob 을 구현한 제한된 곳
의 DataURL 에 대한 URL 길이 제한에 걸렸을 때

More Related Content

What's hot

Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Yeon Soo Kim
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초beom kyun choi
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10hungrok
 
처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1성일 한
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629Dosang Yoon
 
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개beom kyun choi
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10hungrok
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10hungrok
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
Html5 web workers
Html5 web workersHtml5 web workers
Html5 web workersWoo Jin Kim
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기NAVER Engineering
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트병한 유
 

What's hot (20)

Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수
 
Node.js 심화과정
Node.js 심화과정Node.js 심화과정
Node.js 심화과정
 
Jquery핵심노토
Jquery핵심노토Jquery핵심노토
Jquery핵심노토
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
 
3-2. selector api
3-2. selector api3-2. selector api
3-2. selector api
 
Hacosa j query 4th
Hacosa j query 4thHacosa j query 4th
Hacosa j query 4th
 
처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629
 
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
Html5 web workers
Html5 web workersHtml5 web workers
Html5 web workers
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트
 

Viewers also liked

5-2. html5 multimedia
5-2. html5 multimedia5-2. html5 multimedia
5-2. html5 multimediaJinKyoungHeo
 
Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)
Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)
Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)Wonsuk Lee
 
2013년 html5 총정리 (Summary of HTML5 Trend in 2013)
2013년 html5 총정리 (Summary of HTML5 Trend in 2013)2013년 html5 총정리 (Summary of HTML5 Trend in 2013)
2013년 html5 총정리 (Summary of HTML5 Trend in 2013)Wonsuk Lee
 
Purchasing Index (PI) Brochure Spread-2016
Purchasing Index (PI) Brochure Spread-2016Purchasing Index (PI) Brochure Spread-2016
Purchasing Index (PI) Brochure Spread-2016Ben Shute
 
layout ss2015 finaaaaal2.compressed
layout ss2015 finaaaaal2.compressedlayout ss2015 finaaaaal2.compressed
layout ss2015 finaaaaal2.compressedAdina Brata
 
Volunteer Enrichment- Belwin Outing Fall 2015
Volunteer Enrichment- Belwin Outing Fall 2015Volunteer Enrichment- Belwin Outing Fall 2015
Volunteer Enrichment- Belwin Outing Fall 2015kvanbooven
 
ЕГЭ и международные экзамены по английскому языку: анализ устной части
ЕГЭ и международные экзамены по английскому языку: анализ устной частиЕГЭ и международные экзамены по английскому языку: анализ устной части
ЕГЭ и международные экзамены по английскому языку: анализ устной частиAida Rodomanchenko
 
2014 HTML5 총정리
2014 HTML5 총정리2014 HTML5 총정리
2014 HTML5 총정리Wonsuk Lee
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차Michael Yang
 
Procurement Purchasing Insights For Benchmarking Analysis
Procurement Purchasing Insights For Benchmarking AnalysisProcurement Purchasing Insights For Benchmarking Analysis
Procurement Purchasing Insights For Benchmarking Analysispraveenvarghese
 
JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)지수 윤
 
JS특징(scope,this,closure)
JS특징(scope,this,closure)JS특징(scope,this,closure)
JS특징(scope,this,closure)지수 윤
 
비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료지수 윤
 
8주 dom & event basic 실습
8주  dom & event basic 실습8주  dom & event basic 실습
8주 dom & event basic 실습지수 윤
 
10주 ajax 실습
10주 ajax 실습10주 ajax 실습
10주 ajax 실습지수 윤
 
2주 HTML 수업추가
2주 HTML 수업추가2주 HTML 수업추가
2주 HTML 수업추가지수 윤
 
8주 dom & event basic
8주  dom & event basic8주  dom & event basic
8주 dom & event basic지수 윤
 

Viewers also liked (20)

5-2. html5 multimedia
5-2. html5 multimedia5-2. html5 multimedia
5-2. html5 multimedia
 
Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)
Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)
Industry trend of HTML5 in 2012 (2012년 HTML5 총정리)
 
2013년 html5 총정리 (Summary of HTML5 Trend in 2013)
2013년 html5 총정리 (Summary of HTML5 Trend in 2013)2013년 html5 총정리 (Summary of HTML5 Trend in 2013)
2013년 html5 총정리 (Summary of HTML5 Trend in 2013)
 
Academic skills
Academic skillsAcademic skills
Academic skills
 
CIPS_CapDev_WEB
CIPS_CapDev_WEBCIPS_CapDev_WEB
CIPS_CapDev_WEB
 
Purchasing Index (PI) Brochure Spread-2016
Purchasing Index (PI) Brochure Spread-2016Purchasing Index (PI) Brochure Spread-2016
Purchasing Index (PI) Brochure Spread-2016
 
layout ss2015 finaaaaal2.compressed
layout ss2015 finaaaaal2.compressedlayout ss2015 finaaaaal2.compressed
layout ss2015 finaaaaal2.compressed
 
Volunteer Enrichment- Belwin Outing Fall 2015
Volunteer Enrichment- Belwin Outing Fall 2015Volunteer Enrichment- Belwin Outing Fall 2015
Volunteer Enrichment- Belwin Outing Fall 2015
 
ЕГЭ и международные экзамены по английскому языку: анализ устной части
ЕГЭ и международные экзамены по английскому языку: анализ устной частиЕГЭ и международные экзамены по английскому языку: анализ устной части
ЕГЭ и международные экзамены по английскому языку: анализ устной части
 
2014 HTML5 총정리
2014 HTML5 총정리2014 HTML5 총정리
2014 HTML5 총정리
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
 
Procurement Purchasing Insights For Benchmarking Analysis
Procurement Purchasing Insights For Benchmarking AnalysisProcurement Purchasing Insights For Benchmarking Analysis
Procurement Purchasing Insights For Benchmarking Analysis
 
JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)
 
JS특징(scope,this,closure)
JS특징(scope,this,closure)JS특징(scope,this,closure)
JS특징(scope,this,closure)
 
비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료
 
8주 dom & event basic 실습
8주  dom & event basic 실습8주  dom & event basic 실습
8주 dom & event basic 실습
 
10주 ajax 실습
10주 ajax 실습10주 ajax 실습
10주 ajax 실습
 
2주 HTML 수업추가
2주 HTML 수업추가2주 HTML 수업추가
2주 HTML 수업추가
 
8주 dom & event basic
8주  dom & event basic8주  dom & event basic
8주 dom & event basic
 
10주 ajax
10주 ajax10주 ajax
10주 ajax
 

Similar to 5-3. html5 device access

Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수NAVER D2
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Sangon Lee
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 

Similar to 5-3. html5 device access (20)

Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
7. html5 api
7. html5 api7. html5 api
7. html5 api
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Hacosa j query 8th
Hacosa j query 8thHacosa j query 8th
Hacosa j query 8th
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
Nodejs express
Nodejs expressNodejs express
Nodejs express
 
Swt J Face 2/3
Swt J Face 2/3Swt J Face 2/3
Swt J Face 2/3
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
Actionbar and fragment
Actionbar and fragmentActionbar and fragment
Actionbar and fragment
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
Hacosa j query 2th
Hacosa j query 2thHacosa j query 2th
Hacosa j query 2th
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 

5-3. html5 device access

  • 5. www.javaspecialist.co.kr 1. Geolocation API (1/2) • 사용자의 위치 정보를 얻기 위한 JavaScript API – 관련 메서드는 window.navigator.geolocation 객체에 정의되어 있음(window. 생략 가능) – 현재 위치 얻음(한번) • navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options); – 위치 정보 확인(계속) • var watchId = navigator.geolocation.watchPosition(successCallback, errorCallback, options); • successCallback 함수에 전달되는 위치 정보(position) 위치정보 속성 coords 속성 설명 coords latitude 위도 longitude 경도 altitude 표고 accuracy 위도, 경도의 오차 (단위와 오차) altitudeAccuracy 표고의 오차 (단위와 오차) heading Device 의 진행 방향. 북쪽을 기준으로 한 시계방향의 각도로 나타냄 speed Device 의 진행 속도(미터/초). (이용할 수 없을 때는 null) timestamp 위치정보를 얻은 시각(1970년 1월 1일 부터의 millisecond)
  • 6. www.javaspecialist.co.kr 1. Geolocation API (2/2) • errorCallback 함수에 전달되는 객체에 담겨있는 속성과 상수 • options에 지정할 수 있는 정보 속성/상수 설명 enableHighAccuracy 정확도가 높은 위치 정보를 요청 timeout 위치 정보 확인에 시간제한을 설정. 시간제한을 초과하면 TIMEOUT error 발생 maximumAge 위치정보의 유효기간을 설정. 0 을 지정하면 항상 새로운 위치정보를 요청함 속성/상수 설명 code Error Code UNKNOWN_ERROR 알 수 없는 Error (Error code 값 : 0) PERMISSION_DENIED 권한 없음 Error (Error code 값 : 1) POSITION_UNAVAILABLE 위치정보를 얻을 수 없음 (Error code 값 : 2) TIMEOUT 시간제한 초과 (Error code 값 : 3) message Error Message
  • 7. www.javaspecialist.co.kr Lab • Geolocation API로 현재 내 위치를 브라우저에 표시함 • Google Maps에 관심장소(Map Marker)로 표시 – watchPosition()을 이용, 위치정보가 변할 때마다 관심장소 표시 • 브라우저에 지도를 나타내주기 위해 구글 JavaScript Map API이용 – https://developers.google.com/maps/ – Google Maps API는 버전3을 이용하므로 API 키가 없어도 예제 실행가능 – https://developers.google.com/maps/documentation/javascript/tutorial
  • 8. www.javaspecialist.co.kr Lab 1. <!DOCTYPE html> 2. <html> 3. <head> 4. <meta charset="EUC-KR"> 5. <title>Insert title here</title> 6. <style type="text/css"> 7. #map{ 8. width : 1024px; 9. height: 600px; 10. } 11. </style> 12. <script src="http://maps.google.com/maps/api/js?sensor=false"></script> 13. <script src="myposition.js" defer></script> 14. </head> 15. <body> 16. <h1>현재 위치 추적</h1> 17. <button id="start">시작</button> 18. <button id="stop">중지</button> 19. <input type="checkbox" id="gps">GPS 사용 20. <div id="log"> </div> 21. <div id="map"> 22. 지도를 로딩 중입니다... 23. </div> 24. </body> 25. </html>
  • 9. www.javaspecialist.co.kr Lab 1. //파일명 : myposition.js 2. (function() { 3. function log(msg){ 4. var log = document.getElementById("log") || document.querySelector(".log"); 5. if(log) log.innerHTML += msg + "<br>"; 6. } 7. 8. window.onload = function(){ 9. document.getElementById("start").onclick = function(){ 10. //계속 위치 정보를 받고 싶을 때 watchPosition사용 11. //성공 시 success메서드, 실패 시 error메서드 호출 12. //maximumAge 위치정보의 유효 시간 13. watchId = window.navigator.geolocation.watchPosition( 14. success, 15. error, 16. { 17. enableHighAccuracy: document.getElementById("gps").checked, 18. timeout: 5000, 19. maximumAge: 0 20. } 21. ); 22. }; 23. 24. document.getElementById("stop").onclick = function(){ 25. //TODO 위치 추적을 중지한다. 26. //watchPosition으로부터 리턴받은 id값을 인자로 제공함 27. window.navigator.geolocation.clearWatch(watchId); 28. }; 29.
  • 10. www.javaspecialist.co.kr Lab 30. //TODO 구글맵을 불러옵니다. 31. //LatLng와 Map음 http://maps.google.com/maps/api/js에 정의된 클래스, 위도/경도를 가지고 있는 클래스 32. var center = new google.maps.LatLng(37.519768, 126.939769); 33. map = new google.maps.Map(document.getElementById("map"), { 34. mapTypeId: google.maps.MapTypeId.ROADMAP, 35. zoom:17, 36. center: center 37. }); 38. }; 39. 40. // 위치 확인 성공 시 41. function success(position){ 42. //TODO 지도의 중앙을 현재 위치로 세팅한다. 위도, 경도 인자 43. var center = new google.maps.LatLng( 44. position.coords.latitude, 45. position.coords.longitude 46. ); 47. map.setCenter(center); 48. //TODO 마커 표시 49. var marker = new google.maps.Marker({ 50. position: center, 51. title: "내위치", 52. map: map 53. }); 54. }; 55. // 위치 확인 실패 시 56. function error(error){ 57. log("조회 실패: " + error.code); 58. }; 59. })();
  • 13. www.javaspecialist.co.kr 1. Drag & Drop • html 요소의 draggable 속성 – 드래그 대상 요소에 draggable 속성(true/false/값없음) 추가하여 드래그 & 드롭 기능을 사 용함 – draggable="true" • event.dataTransfer 객체 – 드래그 & 드롭에 사용할 데이터를 저장하기 위한 객체 • event.dataTransfer 객체의 속성과 메서드 속성 값 설명 dropEffect copy, move, link, none 드래그 & 드롭 동작의 종류를 지정. copy, move, link, none 중 하나를 가짐. effectAllowed number 허용할 dropEffect를 지정하는 문자열. copy, move, link, copyLink, linkMove, all 등으로 지정 types array setData를 호출 할 때 지정되는 포맷 문자열을 배열 형식으로 얻을 수 있음 files array 다른 애플리케이션으로부터 드래그 & 드롭 된 파일들을 가져올 수 있음 메서드 설명 clearData(type) 드래그 중인 데이터를 삭제함. 인수를 지정하여 특정 데이터 타입의 데이터만 삭제할 수 있음. setData(type, data) 드래그 & 드롭 할 데이터를 저장. 타입은 MIME, Text, URL 또는 문자열로 지정 가능. getData(type) 포맷을 지정하여 데이터를 가져옴 setDragImage(image, x, y) img 요소를 이용하여 드래그 중의 피드백(드래그 아이콘)을 지정. x, y는 표시 위치 addElement(element) 드래그 중 피드백 이미지에 추가할 요소를 지정한다.
  • 14. www.javaspecialist.co.kr 2. 드래그 & 드롭 이벤트 핸들러 속성 이벤트 설명 사용 dragstart 요소를 드래그 시작할 때 DataTransfer에 데이터 넣습니다. event.dataTransfer.setData("listItemId", event.target.id); dragenter 드래그 중 마우스 포인터 가 요소와 겹칠 때 데이터의 드롭을 허용할 것인가 체크하는 코드를 넣을 수 있 다. 또는 드롭 영역의 스타일을 변경시킬 수도 있다. dragover 드래그 중 마우스 포인터 가 요소 위를 가로지를 때 dragleave 드래그 중 마우스 포인터 가 요소 위를 벗어날 때 마우스가 드롭영역에서 벗어날 때 스타일을 변경시킬 수 있다. drop 드롭 할 때 DataTransfer로부터 데이터를 꺼내 처리하는 코드를 포함한다. getData() 메서드를 이용해서 데이터를 꺼낸다. drag 드래그 대상 요소에 드래 그 중을 알림 dragend 드래그 대상 요소에게 드 래그 종료를 알림
  • 15. www.javaspecialist.co.kr 3. 드래그 시작 요소의 이벤트 처리 • 드래그 시작 요소에서 이벤트 처리는 dragstart 이벤트를 사용 • 데이터를 저장하기 위한 dataTransfer 객체를 사용 function onDragStart(event) { if(event.target.tagName.toLowCase() == "li") { event.dataTransfer.setData("listItemId", event.target.id); } else { event.preventDefault();//드래그 대상이 li 요소가 아니면 처리하지 않음 } }
  • 16. www.javaspecialist.co.kr 4. 드롭 대상 요소의 이벤트 처리 • 드롭 대상 요소에서 처리할 수 있는 이벤트 • dragenter : – 드래그 중 마우스 포인터가 대상 요소와 겹치는 순간 호출되는 이벤트. • dragover : – 드래그 중 마우스 포인터가 대상 요소 위를 가로지를 때 간헐적으로 발생하는 이벤트. – 드롭되기 전에 event.preventDefault() 메서드를 통해 디폴트 이벤트 상태를 취소해야 함. • drop : – 드롭 처리를 실행할 때 발생하는 이벤트. 이 때 dataTransfer로부터 데이터를 꺼내어 처리. – 드롭 요소를 포함하는 요소가 이벤트를 포함할 경우 이벤트가 끝난 후 이벤트가 부모 요소 에 전파되는 것을 방지하기 위해 stopPropagation() 메서드를 호출해야 함. • 요소들이 디폴트 이벤트를 가지고 있을 때에는 드롭을 허용하지 않음 – 그럴 때에는 event.preventDefault() 를 통해 디폴트 이벤트 상태를 취소해야 함
  • 19. www.javaspecialist.co.kr 1. File • File interface – File interface 를 사용하면 File 의 File Name 이나 Size 등 기본적인 정보에 접근 할 수 있 음 – File interface는 File 선택 Form 이나 Drag & Drop 을 통해서 사용자가 직접 선택한 File에 한정됨 • File 객체 사용 예 – var file = document.getElementById("file").files[0]; – document.getElementById("fileName").textContent = file.name; – document.getElementById("fileSize").textContent = "(" + file.size + "byte)"; • File Interface 속성과 메서드 Attribute/Method 설명 name File 이름 type File 의 MIME Type(알 수 없을 때는 null) urn File 의 범용 식별자 size File Size slice(start, length) 시작위치와 끝 위치를 지정하여 파일의 내용을 잘라내 새로운 Blob객체를 만 드는 함수
  • 20. www.javaspecialist.co.kr 2. FileReader • FileReader interface – FileReader interface 는 비동기적인 상황에서 사용 – FileReader interface 는 File 의 내용을 읽을 수 있는 기능을 제공함. • FileReader 생성 – var reader = new FileReader(); • FileReader Interface 속성과 메서드 Attribute/Method 설명 readAsBinaryString(fileBlob) File 내용을 읽어 Binary 문자열로 저장 readAsText(fileBlob, encoding) File 내용을 읽어 들여 문자열로 저장, 두 번째 인수는 File 의 문자 encoding 을 지정할 수 있음(기본값 : UTF-8) readAsDataURL(file) File 내용을 읽어 dataURL 형식의 문자열로 저장 result 읽은 File 내용 error error 발생시의 error 정보 onload 읽기 성공 했을 때 호출하는 event handler. load event 에 대응 onprogress 읽기 진행 상황을 얻을 수 있는 event handler. progress event 에 대 응 onerror 읽기 error 시에 호출되는 event handler. error event 에 대응.
  • 21. www.javaspecialist.co.kr 3. Error Code • 파일을 읽을 때 발생하는 에러 코드 상수 Code 설명 NOT_FOUND_ERR 1 읽을 File 을 찾지 못할때 SECURITY_ERR 2 Web Application 이 Access 하기에 안전하지 못한 File일 때 File 에 너무 많은 읽기 호출이 있을 때 사용자의 선택한 이후에 File 에 변경이 있을 때 사용할 수 있음 ABORT_ERR 3 abort() 함수 호출과 같은 것으로 인해 읽기가 중지되었을 때 NOT_READABLE_ER R 4 File 접근 권한 문제와 같은 것으로 인해 File 을 읽지 못할때 ENCODING_ERR 5 동기적, 비동기적으로 readAsText() 함수를 사용할 때는 사용할 수 없 음 DataURL 로 표현될 수 있는 File 이나 Blob 을 구현한 제한된 곳 의 DataURL 에 대한 URL 길이 제한에 걸렸을 때