안녕하십니까? 이번엔 Drag & Drop API 에 대해서 살펴보려합니다.
가끔 우리는 사진, 파일 같은 항목들을 Drag & Drop 할 수 있도록 만든 사이트들을 보셨을 겁니다.
Gmail 에서 보셨을텐데요... HTML 5 적용하기 이전에도 구현이 되어있었죠...
이전에 구현되어있던 Gmail 의 Drag & Drop 은 mouseDown, mouseOver 같은 Mouse 이벤트를 이용하여 Javascirpt 로 구현을 한 것이죠. 
Javascript 를 사용하지 않았다면 ActiveX 를 사용하였겠지요.
이런 Javascript 나 ActiveX 는 별도의 설치가 필요하거나 Javascript 를 사용함으로써 별도의 부하가 생기고요(어떤 분들은 Client 측의 부하는 대수롭지 않게 넘어가시는 분들도 계시죠?) 그 부하로 인해서 버벅거리는 경우도 발생하였을 겁니다.

하지만, 이제 HTML 5 에서는 Drag & Drop API 를 제공하여 좀 더 손쉽게???, 간단하게??? 다른 플러그인들이 도움없이도 구현할 수 있게 되었습니다.(기존에 만든것들을 버리고 새로 구현해야 하는 숙제가 남긴했지만요... ^^ 캬캬캬)

이젠 웹페이지에 있는 content 를 웹페이지 밖, 그러니까는 데스크탑으로 가져올 수도, 데스크탑의 content 를 웹페이지로 막막막? 가지고 갔다가 가지고 왔다가... 하실수 있습니다. ^^

그럼 시작해 봅니다.

10-1. draggable 속성
HTML 5 에 새로이 추가된 속성중에 draggable 속성이 있습니다. true, false값을 가질 수 있습니다.
딱 눈치로 알수 있듯이...
draggable 속성이 true 이면 drag 할 수 있는 것이고, false 면 당근 drag 못하겠죠?

<img draggable="true" src="IMG_4687.jpg"></img>


사실 HTML 5 에서는 img Element 와 href 속성이 지정된 A Element 만 기본값 상태에서 Drag 할 수 있도록 되어 있습니다... 만... ㅋㅋ
Draggable 값이 True 라고 해서 무조건 Drag 할수 있는 것은 아니고요.
API 를 이용한 Javascript 를 사용하셔야 움직이실 수 있읍니다. ㅋㅋㅋ

10-2. Drag & Drop 관련 Event
그럼, HTML 5 에 새롭게 추가된 Drag & Drop API 의 관련 Event 들을 살펴보기로 하겠습니다.
 
 Event 이름 Event 가 발생하는 곳 Action 
 dragstart  Drag 를 할 Element  Drag 가 시작됨
 drag  Drag 를 할 Element  Drag 중
 dragenter  Drag 중 Mouse가 Element와 겹치는 순간의 Element  Element 에 진입했음
 dragleave  Drag 중 Mouse가 Element에서 떠나는 순간의 Element  Element를 떠남
 dragover  Drag 중 Mouse 가 현재 위치한 Element  Element 위를 지나고 있음
 drop  Drop 할 Element  Drop 됨
 dragend  Drag 하고 있는 Element  Drag 가 끝남

특히나 dragenter, dragover, drop  이 세 event 는 Drop 과 관련하여 적절히 사용할 필요가 있습니다. 


10-3. DataTransfer
DataTransfer? 이건 또 뭐야? 라는 분이 계실 겁니다.
DataTransfer 객체는 Drag & Drop API 를 사용하는데 있어서 반드시 있어야 하는 객체이구요.
이녀석은 Drag & Drop 되는 녀석들의 Data 를 담는 역할을 합니다.

그럼, DataTransfer 의 속성과 Method 를 살펴보도록 하겠습니다. 

 속성/Method  설명
 dropEffect  Drag & Drop동작의 종류를 나타내는 문자열
 copy, move, link, none(초기값) 중 하나
 effectAllowed 속성에 의해 허용되지 않은 종류의 동작은 처리할 수 없음.
 effectAllowed  허용할 dropEffect를 지정하는 문자열
 copy, move, link 와 같은 동작을 허용하며 copyLink, copyMove, linkMove, all 과 같은 둘 이상의 동작을 동시에 허용할 수도 있음.
 none(drop을 허용하지 않음) 을 지정할 수 있음.
 dragstart 이벤트에 값을 지정하는 것이 일반적임
 types  dragstart 이벤트 발생시 DOM 목록에 있는 data format 을 설정하며 setData 함수를 호출할때 지정되는 format 문자열을 배열형식으로 얻을 수 있음.
 clearData(type)  Drag & Drop에 사용할 데이터를 초기화하며 Drag 중인 데이터를 삭제함.
 setData(type, data)  Drag & Draop 하기위해 새로운 요소를 정의하며 Drag & Drop 할 데이터를 저장함.
 getData(type)  setData 에서 정의한  Element와 Format, 데이터를 가져옴.
 files  다른 application 으로부터 Drag & Drop 할 파일을 가져옴.
types 속성에 "Files" 라는 문자열이 저장됨.
 setDragImage(image, x, y)  Drag 중 img Element 를 이용하여 피드백을 지정함.
 addElement(element)  Drag 중 피드백 image 에 추가할 Element 를 추가함.



10-4. 예제...

이제 간단한 Drag & Drop 예제를 만들어 보겠습니다. 정말 간단한 예제 입니다. ^^;

<!DOCTYPE html>
<html>
    <head>
        <title>Drag & Drop Test</title>
        <script type="text/javascript">
            function drag(target, e) {
                e.dataTransfer.setData('Text', target.id);               
            };
            function drop(target, e) {
                var id = e.dataTransfer.getData('Text');
                target.appendChild(document.getElementById(id));               
                e.preventDefault();
            };    
        </script>
        <style>
            div#Red {border:2Px solid #F00;}
            div#Blue {border:2Px solid #00F;}
            div {width:400px;height:266px;}
            a {margin:50px;display:block;}
        </style>
    </head>  
    <body>       
        <div id="Red" ondrop="drop(this, event);" ondragenter="return false;" ondragover="return false;"></div>
        <div id="Blue" ondrop="drop(this, event);" ondragenter="return false;" ondragover="return false;"></div>
        <img draggable="true" id="textlink" ondragstart="drag(this, event);" src="IMG_4687.jpg"></img>
    </body>
</html>


 


위와 같이 firefox, safari, chrome 는 이미지를 이동시킬때 기본적으로 이미지를 표시하지만 ie 의 경우는 마우스커서를 파일 복사할때 나타내는 커서로 변경시킵니다. opera 는 작동을 하지 않는 군요... 다른 속성을 추가해야 할 것으로 보입니다.

예제와 함께 간단하게 Drag & Drop API 를 살펴보았습니다.
위 예제를 한번 다시 살펴보시고요...

그럼 행복한 고수되십시요...


 woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\



반응형

'Web > HTML 5' 카테고리의 다른 글

[HTML 5] 13. Communication API  (0) 2011.06.19
[HTML 5] 12. Offline Web Application  (0) 2011.06.18
[HTML 5] 10. Canvas Element  (2) 2011.06.18
[HTML 5] 9. Audio Element  (0) 2011.06.14
[HTML 5] 8. Video Element  (3) 2011.06.10

Canvas Element 는 HTML 5 에서 가장? 많이 주목받고 있는 새롭게 추가된 element 들 중 하나입니다.
요 녀석때문에 세간에 말이 많죠...
특히나 개발자들한테요...

실버라이트나 플래쉬는 이제 죽는거냐?
"Microsoft 는 이제 Silverlight 를 어떻게 할거냐?" (뭐 이런주제가 Canvas 때문만은 아니겠지만요... ㅋㅋ)

Canvas 는 할 수 있는 일이 너무도 많습니다.
일단 "Canvas" 라는 말 자체에서도 느낄 수 있듯이, 그림을 그릴 수 있을 것입니다. 이미지도 올릴 수 있습니다. 그렇다면 사진합성도 할 수 있겠죠? 그림을 그릴 수 있으니... 그래프도 그릴 수 있겠죠? 애니메이션도 만들 수 있고요, 게임까지도 "Canvas" 위에서 구현할 수 있습니다. 이 들에 대한 예제는 도처에 널부러져? 있습니다.

할 수 있는 것도 많으니 설명할 것들은 얼마나 많겠습니까? ^^;
많은 것을 한꺼번에 다루기에는... 그래서 꼭 알아야 할 것들만을 간단히 살펴보는 것으로 진행하려 합니다.

9-1. 사용법
<canvas id="vas" width="200" hegiht="300"></canvas>

위 Markup 을 보면 width, height 속성을 부여하고 있습니다만, 만약 이들을 지정해주지 않는다면 기본적으로 background Color 는 "Transparent" 로 width 는 300 pixel, height 는 150 pixel 로 지정합니다.

그리고 사용하는 Web Browser 가 Canvas Element 를 지원하지 않는 경우 다음과 같이 대체해서 보여줄 수있는 이미지를 지정할 수 있습니다.
<canvas id="vas" width="200" hegiht="300">
<img src="eximg.jpg" width="200" hegiht="300" alt="대체이미지" />
</canvas>

그리고 다음과 같이 Javascript 를 이용해서 Canvas Element 에 접근할 수 있습니다.
var vas=document.getElementById('vas');

var cntxt = vas.getContext('2d') // 요로케하면 2d 그림을 그릴 수 있습니당... ^^

혹시나 Canvas Element 를 지원하지 않는 IE 를 사용하시는 분들을 위해서 아래 링크에 가셔서 Javascript 라이브러리를 다운받으셔서 사용해 보시기 바랍니다. (거 있잖아요.. 평면TV 엑스캔 헤벨레.. 하고 이름이 비슷하네효.. ㅋㅋ)  



이제 슬슬 canvas 위에 그림을 그려볼까효? ^^

9-2. 2D 도형그리기

먼저 도형을 그려보지요...

<!DOCTYPE HTML>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 5 Canvas 예제</title>
</head>
<body>
    <canvas id="woojjaCanvas" width="200" hegiht="300"></canvas>
    <script type="text/javascript">
        var canvas=document.getElementById('woojjaCanvas');
        var cvas=canvas.getContext('2d');
        cvas.fillStyle='#FF0000';
        //cvas.fillStyle="rgba(255,0,0,0.3)";
        cvas.fillRect(10,10,80,100);
    </script>
</body>
</html>


 


fillStyle 은 16진수로 적으셔도 되고요..
cvas.fillStyle="rgba(255,0,0,0.3)";  와 같이 rgba 값을 이용해도 되는데
a 값은 alpha 값으로 투명도를 나타낸다는 것. 잘 아실테고 값은 0~1 사이값을 넣어주시면 됩니다.
아래 이미지는 rgba 값을 적용한 것입니다.


 함수  
 fillRect  속을 채운 사각형을 그립니다.
 strokeRect  사각형 테두리만 그립니다. 
 clearRect  지정한 사각영역을 투명하게 지웁니다.

<!DOCTYPE HTML>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 5 Canvas 예제</title>
 <style type="text/css">
  #woojjaCanvas { border:1px solid #000000;}
 </style>
</head>
<body>
    <canvas id="woojjaCanvas" width="300" height="200"></canvas>
    <script type="text/javascript">
        var canvas=document.getElementById('woojjaCanvas');
        var cvas=canvas.getContext('2d');
        cvas.fillStyle='#FF0000';
        //cvas.fillStyle="rgba(255,0,0,0.3)";

        cvas.fillRect(10,10,150,180);
        cvas.
clearRect(20,20,70,90);
        cvas.
strokeRect(30,30,200,100);
    </script>
</body>
</html>


위 Markup 을 Web Browser 로 봤습니다.

사각형만 살펴보았는데요.
arc 를 이용하여 원을 그릴 수 있습니다.
원그리기는 숙제? ㅋㅋㅋ  

9-3. 선긋기

이번엔 선 긋기를 해보려합니다.

<!DOCTYPE HTML>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 5 Canvas 예제</title>
 <style type="text/css">
  #woojjaCanvas { border:1px solid #000000;}
 </style>
</head>
<body>
    <canvas id="woojjaCanvas" width="300" height="200"></canvas>
    <script type="text/javascript">

        var canvas=document.getElementById('woojjaCanvas');
        var cvas=canvas.getContext('2d');

        cvas.beginPath();

        cvas.lineWidth=15;
        cvas.lineCap="round";

        cvas.lineTo(20, 50);
        cvas.lineTo(100, 150);
        cvas.stroke();

        cvas.lineTo(60, 50);
        cvas.lineTo(140, 150);
        cvas.stroke();

  
        cvas.moveTo(120, 20);
        cvas.lineTo(200, 180);
        cvas.stroke();
 
        cvas.moveTo(180, 40);
        cvas.lineTo(240, 150);
        cvas.stroke();

        cvas.clothPath();

    </script>
</body>
</html>



직선말고도 quardratiCurve(2차 베지어곡선), bezierCurveTo(3차 베지어곡선) 등의 함수를 이용해서 곡선을 그릴 수 있습니다.

<!DOCTYPE HTML>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 5 Canvas 예제</title>
 <style type="text/css">
  #woojjaCanvas { border:1px solid #000000;}
 </style>
</head>
<body>
    <canvas id="woojjaCanvas" width="300" height="200"></canvas>
    <script type="text/javascript">
        var canvas=document.getElementById('woojjaCanvas');
        var cvas=canvas.getContext('2d');
        cvas.beginPath();
        cvas.lineWidth=15;
        cvas.lineCap="round";
        cvas.lineTo(200, 50);
        cvas.lineTo(240, 100);
        cvas.lineTo(280, 70);
        cvas.lineTo(200, 50);
        cvas.clothPath();
        cvas.fill();
    </script>
</body>
</html>


위와 같이 clothPath 함수를 이용하여 선긋기를 닫으면 속이 찬 도형을 그릴 수 있습니다.

9-4. 문자 넣기
문자 넣기 또한 그렇게 어렵지 않습니다.
한번 넣어 볼까요?
textAlign 을 여러가지로 바꿔서 넣어봤습니다. shadow 효과도 넣어봤구요.
<!DOCTYPE HTML>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 5 Canvas 예제</title>
 <style type="text/css">
  #woojjaCanvas { border:1px solid #000000;}
 </style>
</head>
<body>
    <canvas id="woojjaCanvas" width="500" height="300"></canvas>
    <script type="text/javascript">
        var canvas=document.getElementById('woojjaCanvas');
        var cvas=canvas.getContext('2d');

        cvas.font = "30px Gothic";
        cvas.fillStyle = "rgba(255,0,0,1)";

        cvas.shadowColor = "rgba(0,255,0,0.9)";
        cvas.shadowOffsetX="10";
        cvas.shadowOffsetY= "10";
        cvas.shadowBlur="15";

        cvas.textAlign = "start";
        cvas.fillText("SQLER 화이팅!!!", 150, 30);

        cvas.textAlign = "end";
        cvas.fillText("SQLER 화이팅!!!", 150, 70);

        cvas.textAlign = "left";
        cvas.fillText("SQLER 화이팅!!!", 150, 110);

        cvas.textAlign = "center";
        cvas.fillText("SQLER 화이팅!!!", 150, 150);  

        cvas.textAlign = "right";
        cvas.fillText("SQLER 화이팅!!!", 150, 190);

        cvas.textAlign = "center";
        cvas.strokeStyle = "#0000FF";
        cvas.strokeText("SQLER 화이팅!!!", 150, 240);

    </script>
</body>
</html>

fillText 함수와 strokeText 함수에 따라서 Text 의 모양을 결정할 수 있습니다.
shadow 관련 함수에 따라서 아래와 같이 Text 에 음영을 적용할 수 있습니다.


위에 보시는 바와 같이 textAlign 값 변경에 따라서 배치가 달라지는 것을 보실 수 있습니다. ^^


9-5. 이미지 삽입

그럼 이번엔 이미지를 넣어볼까요?

<!DOCTYPE HTML>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 5 Canvas 예제</title>
    <style type="text/css">
        #woojjaCanvas { border:1px solid #000000;}
    </style>
    <script type="text/javascript">
        function drawCanvas() {
            var canvas=document.getElementById('woojjaCanvas');
            var cvas=canvas.getContext('2d');
            var ballet = new Image();
            ballet.src='IMG_4687.jpg';
            cvas.drawImage(ballet, 10, 10);
        };
    </script>
</head>
<body onload="drawCanvas();">
    <canvas id="woojjaCanvas" width="420" height="286"></canvas>
</body>
</html>

drawImage 함수를 사용하여 image 를 Canvas 에 그려넣습니다.



훔...그런데...  ie 에서는 이미지가 뜨질 않는군요... ㅡㅡ'

9-6. 그래프

그럼 이미지와 선들을 함께 그려서 그래프를 그려보도록 하겠습니다.

<!DOCTYPE HTML>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 5 Canvas 예제</title>
    <style type="text/css">
        #woojjaCanvas { border:1px solid #000000;}
    </style>
    <script type="text/javascript">
        function drawCanvas() {
            var canvas=document.getElementById('woojjaCanvas');
            var cvas=canvas.getContext('2d');
            var ballet = new Image();
            ballet.src='canvas_back.png;

            cvas.drawImage(ballet, 10, 10);
            cvas.beginPath();
            cvas.strokeStyle='#FF0000';

            cvas.lineTo(60,313);
            cvas.lineTo(120,166);
            cvas.lineTo(180,76);
            cvas.lineTo(240,250);
            cvas.lineTo(300,70);
            cvas.lineTo(360,200);
            cvas.lineTo(420,120);
            cvas.lineTo(480,70);

            cvas.stroke();

        };
    </script>
</head>
<body onload="drawCanvas();">
    <canvas id="woojjaCanvas" width="541" height="364"></canvas>
</body>
</html>



배경이미지를 그리고나서 그 위에 선을 긋는 방식으로 그래프를 완성 했습니다.
위 Markup 의 값과 그래프의 값이 맞지는 않지만...
이런방식으로 그린다는 것을 보여드리려고... ^^' 

9-7. 여러 예제사이트
지금까지는 Canvas 를 단순하게 다루는 것을 설명했었지만, 캔버스는 정말 많은 것을 만들어 낼 수 있습니다.
그런 예가 될 수 있는 사이트는 정말 많은데요...
몇가지 예를 들어 보도록 하겠습니다.

1. Test Drive Site Map
http://ie.microsoft.com/testdrive/Views/SiteMap/Default.html
내의 Canvas 예제

2. Tron


http://disneydigitalbooks.go.com/tron/

3. MugTug



http://mygtug.com/sketchpad/

4. Pacman



http://html5games.net/game/google-pacman



지금까지 Canvas 에 대해서 한번 살펴 보았습니다.
살펴본 사항들 보다 살펴보지 못한 사항들이 더 많으니까요.
한번 직접 테스트를 해보시면서 살펴보지 못한 사항들을 체크해 보시기 바랍니다.

그럼...



행복한 고수되셔요..



woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형

'Web > HTML 5' 카테고리의 다른 글

[HTML 5] 12. Offline Web Application  (0) 2011.06.18
[HTML 5] 11. Drag & Drop API  (0) 2011.06.18
[HTML 5] 9. Audio Element  (0) 2011.06.14
[HTML 5] 8. Video Element  (3) 2011.06.10
[HTML 5] 7. Rich Text Edit API  (0) 2011.06.08

Audio Element 도 HTML 5 에서 관심이 주목되고 있는 새롭게 추가된 element 들 중 하나죠.

Audio Element 도 video Element 와 그 사용법은 다르지 않습니다.
큰 차이점이라면... Poster 속성이 없다는 것!!! 입니다.

그럼 기본적인 사용방법을 살펴보겠습니다.

<audio src="http://www.w3schools.com/html5/horse.ogg"></audio>

그럼 여기에...
audio file 을 자동적으로 재생시키려면...

<audio src="http://www.w3schools.com/html5/horse.ogg" autoplay></audio>
또는
<audio src="http://www.w3schools.com/html5/horse.ogg" autoplay="autoplay"></audio>

이렇게 하면 되겠습니다.

Audio Element 도 Video Element 처럼 Web Browser 가 Audio Element 를 지원하느냐에 따라 실행여부를 알 수 있는데..
Web Browser 가 Audio Element 를 지원하지 않을 때 특정 문구를 표시할 수 있도록 지원 시킬수 있습니다.

<audio src="http://www.w3schools.com/html5/horse.ogg" autoplay>
<p>Your browser does not support audio tag</p>
</audio>

Audio Element 도 Vedio Element 와 같이 재생 control 을 표시할 수 있습니다.

<audio src="http://www.w3schools.com/html5/horse.ogg" controls></audio>
또는
<audio src="http://www.w3schools.com/html5/horse.ogg" controls="controls"></audio>


다음은 Audio Element 가 사용할 수 있는 속성들을 소개하겠습니다.

 속성명 값  기능 
 src  파일 경로  Source
 autoplay  autoplay  페이지가 Load 되자마자 사운드를 재생할지를 지정합니다.
 controls  controls  플레이어를 표시합니다.
 loop  재생횟수  audio 를 반복 재생할 횟수를 지정합니다.
 preload  none, auto, meta  Page 가 열리면 audio 를 미리 Load 합니다. 

음... 이번엔 audio Element 가 지원하는 Audio 코덱들을 살펴보도록 하겠습니다.
   IE FireFox  Opera Chrome  Safari  
 Vorbis(oga, ogg)  X  O  O  O  X
 wav, wma  O  O  O  X  O
 mp3  O  X  X  O  O
 AAC  O  X  X  O  O


마지막으로 Control 의 모양을 한번 보도록 하죠...

<audio controls="controls" id="ado">
  <source src="
http://test2.momac.net/html5/demo_audio/youaremylife_instrumental.mp3"/>
  <source src="
http://test2.momac.net/html5/demo_audio/youaremylife_instrumental.ogg"/>
  <source src="
http://test2.momac.net/html5/demo_audio/youaremylife_instrumental.wav"/>
  <p>Your browser does not support the audio tag.</p>
</audio>




Video 의 Control 모양과 다르지 않죠? ^^


오늘은 간단히 audio Element 에 대해서 살펴보았습니다.

다음은 가장? 관심이 많으실 Canvas Element 에 대해서 알아보도록 하죠...

그럼 행복한 고수되셔요..


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형

'Web > HTML 5' 카테고리의 다른 글

[HTML 5] 11. Drag & Drop API  (0) 2011.06.18
[HTML 5] 10. Canvas Element  (2) 2011.06.18
[HTML 5] 8. Video Element  (3) 2011.06.10
[HTML 5] 7. Rich Text Edit API  (0) 2011.06.08
[HTML 5] 6. Strong Web Form  (0) 2011.06.05

+ Recent posts