<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>overfloweblog &#187; script.aculo.us</title>
	<atom:link href="http://overfloweb.com/blog/index.php/archives/tag/scriptaculous/feed" rel="self" type="application/rss+xml" />
	<link>http://overfloweb.com/blog</link>
	<description>are you driving me crazy?</description>
	<lastBuildDate>Sun, 13 May 2012 16:59:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>[Script.aculo.us] dragdrop.js</title>
		<link>http://overfloweb.com/blog/index.php/archives/12</link>
		<comments>http://overfloweb.com/blog/index.php/archives/12#comments</comments>
		<pubDate>Tue, 01 Apr 2008 05:24:40 +0000</pubDate>
		<dc:creator>overflow</dc:creator>
				<category><![CDATA[javaScript]]></category>
		<category><![CDATA[script.aculo.us]]></category>

		<guid isPermaLink="false">http://overflow.ivyro.net/?p=12</guid>
		<description><![CDATA[  dragdrop.js script.aculo.us에서 Drag&#38;Drop 기능을 제공해주는 라이브러리입니다.   Droppables 드래그 대상이 되는 Draggable객체들을 Drop할 수 있는 element들을 관리하는 클래스입니다.   Attribute Droppables.drops: Array &#8211; Droppable 객체(실제로는 add()의 options 전체 항목이 저장됩니다.)들을 저장하는 배열입니다.   Method 1. Droppables.add(element, options) &#8211; Droppable 객체를 추가합니다. options로 다음 사항을 받을 수 있습니다. options 항목들 accept &#8211; Droppable에서 받아들일 Draggable [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="font-family: 'Times New Roman';">  dragdrop.js<br />
</span></strong>script.aculo.us에서 Drag&amp;Drop 기능을 제공해주는 라이브러리입니다.</p>
<p><span style="font-weight: bold; font-size: small;">  Droppables</span><br />
드래그 대상이 되는 Draggable객체들을 Drop할 수 있는 element들을 관리하는 클래스입니다.</p>
<div class="imageblock center" style="CLEAR: both; TEXT-ALIGN: center"><img src="http://cfs3.tistory.com/upload_control/download.blog?fhandle=YmxvZzk5NzVAZnMzLnRpc3RvcnkuY29tOi9hdHRhY2gvNS81NjkuUE5H" alt="사용자 삽입 이미지" width="334" height="224" /></div>
<p><span style="font-style: italic; font-size: small;">  Attribute</span><br />
<span style="COLOR: #8e8e8e">Droppables.</span>drops: Array &#8211; Droppable 객체(실제로는 add()의 options 전체 항목이 저장됩니다.)들을 저장하는 배열입니다.</p>
<p><span style="font-style: italic; font-size: small;">  Method</span><br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">1. </span>Droppables.</span>add(<span style="FONT-STYLE: italic">element</span>, <span style="FONT-STYLE: italic">options</span>) &#8211; Droppable 객체를 추가합니다. options로 다음 사항을 받을 수 있습니다.<br />
options 항목들</p>
<ul>
<li>accept &#8211; Droppable에서 받아들일 Draggable 객체의 클래스 스트링들을 설정합니다.</li>
<li>containment &#8211; Droppable에서 받아들일 Draggable객체의 element나 id를 설정합니다.</li>
<li>hoverclass<span style="COLOR: #8e8e8e">:boolean</span> &#8211; 받아들이기로 한 Draggable객체가 Droppable의 위에 있을 때 css를 설정하는 class를 설정합니다.</li>
<li>overlap &#8211; &#8216;<span style="COLOR: #993366">horizontal</span>&#8216; 또는 &#8216;<span style="COLOR: #993366">vertical</span>&#8216;을 인자로 받습니다. 수직/수평 방향으로 이동할 때 동작이 발생하도록 합니다.</li>
<li>greedy<span style="COLOR: #8e8e8e">:boolean</span> &#8211; true로 설정된 경우 hover와 관련된 처리를 수행하지 않습니다.</li>
</ul>
<p>options 항목들 중 내부사용 프로퍼티</p>
<ul>
<li><span style="COLOR: #8e8e8e">tree</span> &#8211; tree에서 사용하기 위한 코드로 보임</li>
<li><span style="COLOR: #8e8e8e">_continaers </span>- options.containment객체들이 저장됩니다.</li>
<li><span style="COLOR: #8e8e8e">element </span>- 실제 Droppable element가 저장됩니다. <span style="FONT-STYLE: italic"><br />
</span></li>
</ul>
<p>options 항목의 callback들</p>
<ul>
<li>onHover(<span style="COLOR: #8e8e8e; FONT-STYLE: italic">dragElement, dropElement, position</span>) &#8211; 받아들이기로 한 Draggable 객체가 Droppable의 위에 있에 있을 때 메소드를 onHover 인자로 받은 function을 호출합니다.</li>
<li>onDrop(<span style="COLOR: #8e8e8e; FONT-STYLE: italic">dragElement, dropElement, event</span>) &#8211; 받아들이기로 한 Drggable 객체가 Droppable의 위에서 릴리즈되었을 때 onDrop 인자로 받은 function을 호출합니다.</li>
</ul>
<p><span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">2. </span></span><span style="COLOR: #8e8e8e">Droppables.</span>remove(<span style="FONT-STYLE: italic">element</span>) &#8211; Droppable 객체를 삭제합니다.<br />
<span style="FONT-WEIGHT: bold"><br />
3.</span> <span style="COLOR: #8e8e8e">Droppables.</span>findDeepestChild(drops)<br />
- drops 루프를 돌면서 drops에서 가장 먼저 등록한 Droppable 객체들 중에서 가장 상위에 있는 Droppable 객체를 찾는 메소드입니다. (의도는?)<br />
<span style="FONT-WEIGHT: bold"><br />
4.</span> <span style="COLOR: #8e8e8e">Droppables.</span>isContained(element, drop)<br />
- 인자로 받는 element의 부모노드가 drop의 containment(받아들이기로 한 element) 목록에 있는 지 여부를 리턴합니다.</p>
<p><span style="FONT-WEIGHT: bold">5.</span> <span style="COLOR: #8e8e8e">Droppables.</span>isAffected(point, element, drop)<br />
- 인자로 받는 element가 인자로 받는 drop(Droppable)에 Drop이 된 것인지의 여부를 체크하는 메소드입니다.</p>
<ol>
<li>drop.element와 달라야하고,</li>
<li>drop._containers가 있는 경우 여기에 속해야하고,</li>
<li>drop.accept가 있는 경우 element의 className중 하나가 해당해야하고,</li>
<li>drop.element의 안에 인자로 받는 point의 위치가 속해야 합니다.</li>
</ol>
<p><span style="FONT-WEIGHT: bold">6.</span> <span style="COLOR: #8e8e8e">Droppables.</span>activate(drop) [<span style="COLOR: #8e8e8e">Droppables.</span>deactivate(drop)]<br />
- active[deactive]가 된 경우, drop.hoverclass가 있다면 drop.element에 hoverclass를 설정[제거]하고 last_activate 값을 설정[null로 설정]합니다.</p>
<p><span style="COLOR: #993366">※ show, fire, reset 메소드의 경우 Draggable에서 호출되는 메소드입니다. </span><br />
<span style="FONT-WEIGHT: bold">7. </span><span style="COLOR: #8e8e8e">Droppables.</span>show(point, element)<br />
- element의 Drop에 해당하는 Droppable이 있으면 hover 이펙트를 발생시킵니다.</p>
<ol>
<li>인자로 받은 element가 Drop되었는지를 체크(<span style="FONT-STYLE: italic">isAffected()</span>)하여 affected에 담습니다.</li>
<li>affected된 Droppable 중에서 가장 상위의 element(<span style="FONT-STYLE: italic">findDeepestChild()를 사용하여</span>)를 찾습니다.</li>
<li>해당하는 Droppable을 activate시킵니다.</li>
</ol>
<p><span style="FONT-WEIGHT: bold">8.</span> <span style="COLOR: #8e8e8e">Droppables.</span>fire(event, element) &#8211; onDrop 옵션을 가지고 있는 경우 onDrop 이벤트를 실행시킵니다.<br />
<span style="FONT-WEIGHT: bold">9.</span> <span style="COLOR: #8e8e8e">Droppables.</span>reset() &#8211; 초기화(deactivate) 시킵니다.</p>
<p><span style="font-weight: bold; font-size: small;">  Draggables</span><br />
Draggables객체들을 관리하는 클래스입니다.</p>
<div class="imageblock center" style="CLEAR: both; TEXT-ALIGN: center"><img src="http://cfs2.tistory.com/upload_control/download.blog?fhandle=YmxvZzk5NzVAZnMyLnRpc3RvcnkuY29tOi9hdHRhY2gvNS81NDMuUE5H" alt="사용자 삽입 이미지" width="390" height="340" /></div>
<p><span style="font-style: italic; font-size: small;">  Attribute</span><br />
<span style="COLOR: #8e8e8e">Draggables.</span>drags: Array &#8211; draggable을 저장합니다.<br />
<span style="COLOR: #8e8e8e">Draggables.</span>observers: Array -<br />
activeDraggable &#8211; 현재 활성화되어 있는 Draggable을 가르키는 변수입니다.</p>
<p><span style="font-style: italic; font-size: small;">  Method</span><br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">1. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>register(<span style="FONT-STYLE: italic">draggable</span>)<br />
- draggable을 인자로 받아서 drags에 추가합니다.<br />
- drggable이 처음 등록되는 경우 document의 mouseup/mousemove/keypress 이벤트 핸들러로 eventMoueUp/eventMouseMove/eventKeypress 메소드를 등록합니다.</p>
<p><span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">2. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>unregister(<span style="FONT-STYLE: italic">draggable</span>) -<br />
- 인자로 받는 draggable을 drags에서 삭제합니다.<br />
- 모든 draggable이 삭제되는 경우, document의 mouseup/mousemove/keypress 이벤트에 등록된 핸들러들을 모두 삭제합니다.</p>
<p><span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">3. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>activate(<span style="FONT-STYLE: italic">draggable</span>)<br />
- Draggable에서 호출되며, (delay 옵션이 있는 경우 dealy 옵션 뒤에) activeDraggable을 설정합니다.</p>
<p><span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">4. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>deactivate() &#8211; activeDraggable을 삭제합니다.(null처리)</p>
<p><span style="COLOR: #993366">※ 2에서 등록하였던 mouseup/mousemove/keypress 이벤트에 따라서, (activeDraggable이 있는 경우)activeDraggable에 해당하는 이벤트를 전달하는 역할을 합니다. </span><br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">5. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>updateDrag(<span style="FONT-STYLE: italic">event</span>)<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">6. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>endDrag(<span style="FONT-STYLE: italic">event</span>)<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">7. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>keyPress(<span style="FONT-STYLE: italic">event</span>) <br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000"><br />
</span><span style="COLOR: #993366">※ 8, 9, 10, 11은 Draggables.observers와 관련된 메소드들로 Draggable에서 onStart/End/Drag 이벤트가 발생됬을 때, 해당하는 이벤트를 듣기 위한 구조입니다. </span><span style="FONT-WEIGHT: bold; COLOR: #000000"><br />
8. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>addObserver(<span style="FONT-STYLE: italic">observer</span>)<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">9. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>removeObserver(<span style="FONT-STYLE: italic">element</span>)<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">10. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>notify(<span style="FONT-STYLE: italic">eventName, draggable, event</span>)<br />
- <span style="COLOR: #8e8e8e"><span style="COLOR: #000000">notify는 Draggable에서 호출되는 메소드로 onStart/onEnd/onDrag 이벤트가 발생한경우 observer에서 해당하는 이벤트를 관차하는 observer가 있는 경우 observer의 callback을 호출한 후 draggable의 등록된 callback을 호출합니다. </span></span><br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">11. </span></span><span style="COLOR: #8e8e8e">Draggables</span><span style="COLOR: #8e8e8e">.</span>_cacheObserverCallbacks()</p>
<p><span style="font-weight: bold; font-size: small;">  Draggable</span><br />
Drag되는 (Draggable)객체 입니다.</p>
<div class="imageblock center" style="CLEAR: both; TEXT-ALIGN: center"><img src="http://cfs3.tistory.com/upload_control/download.blog?fhandle=YmxvZzk5NzVAZnMzLnRpc3RvcnkuY29tOi9hdHRhY2gvNS81NzAuUE5H" alt="사용자 삽입 이미지" width="344" height="441" /></div>
<p><span style="font-style: italic; font-size: small;">Creation</span></p>
<blockquote><p><span style="COLOR: #993366">new </span>Draggable(<span style="FONT-STYLE: italic">&#8216;id_of_element&#8217;</span>, [<span style="FONT-STYLE: italic">options</span>]);</p></blockquote>
<p>options항목은 다음과 같습니다.</p>
<ul>
<li>handle &#8211; v1.0에서는 draggable할 element의 레퍼런스와 id를 인자로 받습니다. v1.5에서는 css 클래스 스트링으로 사용됩니다.</li>
<li>revert <span style="COLOR: #8e8e8e">:boolean</span> &#8211; true인 경우, 시작점으로 돌아갑니다. function이 들오올 수 있습니다.(since v1.5) 디폴트 값은 false입니다.</li>
<li>snap &#8211; true인 경우, snapping(달려들어 무는)이 발생합니다. 디폴트 값은 false입니다.</li>
<li>zindex &#8211; draggable할 item의 zindex를 정의합니다.</li>
<li>constraint &#8211; &#8216;horizontal&#8217; 또는 &#8216;vertical&#8217;이 설정되는 경우, 수평/수직으로만 이동하도록 설정됩니다.</li>
<li>ghosting <span style="COLOR: #8e8e8e">:boolean</span> &#8211; Drag~Drop이 진행되는 동안 자신의 위치에 clone object를 남겨둡니다.</li>
<li>starteffect &#8211; Drag가 시작될 때, 적용할 이펙트를 정의합니다. 디폴트로 투명 이펙트(Opacity)를 실행합니다.</li>
<li>reverteffect &#8211; Drag를 하다 되돌아가는 경우(Droppable영역이 아닌 지역에서 릴리즈했을 때)에 적용할 이펙트를 정의합니다. 디폴트 값으로는 시작점 포인트로 직선 이동하는 이펙트(Move)를 실행합니다.</li>
<li>endeffect &#8211; Drag가 종료될 때, 적용할 이펙트를 정의합니다. 디폴트로 투명 이펙트(Opacity)를 실행합니다.</li>
</ul>
<p>options에 설정되는 callback function입니다.</p>
<ul>
<li>change &#8211; Drag로 인하여 Draggable의 위치가 변경된 경우 발생합니다.</li>
</ul>
<p><span style="font-style: italic; font-size: small;">  Attribute</span><br />
<span style="COLOR: #8e8e8e">Draggable.</span>drags: Array &#8211; draggable을 저장합니다.<br />
<span style="COLOR: #8e8e8e">Draggable.</span>observers: Array &#8211; observer할 object들을 저장합니다.<br />
activeDraggable &#8211; 현재 활성화되어 있는 Draggable을 가르키는 변수입니다.<br />
dragging: <span style="COLOR: #8e8e8e">boolean </span>- dragging이 진행 중인지를 저장하는 변수입니다.</p>
<p><span style="font-style: italic; font-size: small;">  Method</span><br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">1. </span></span>destroy()<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">2. </span></span>currentDelta() &#8211; Draggable element의 left/top 위치를 리턴합니다.<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">3. </span></span>initDrag(<span style="FONT-STYLE: italic">event</span>)<br />
- Draggable에 mousedown 이벤트가 발생한 경우 호출됩니다.<br />
- draggable에 포함되는치, form element인지를 체크한 후, 현재의 마우스 위치와 실제 화면상의 위치 값을 저장한 후 Draggables.activate를 호출합니다.<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000"><br />
4. </span></span>startDrag(<span style="FONT-STYLE: italic">event</span>)<br />
- Draggable.updateDrag에서 호출됩니다.</p>
<ol>
<li>dragging 값을 true로 설정합니다.</li>
<li>zindex, ghosting, scroll과 관련된 option이 있는 경우 해당 option과 관련된 작업을 수행합니다.</li>
<li>Draggables에 onStart이벤트가 발생했음을 알립니다.</li>
<li>options에 starteffect가 있는 경우 starteffect를 수행합니다.</li>
</ol>
<p><span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">5. </span></span>updateDrag(<span style="FONT-STYLE: italic">event, pointer</span>)<br />
- Draggables.updateDrag에서 document의 mousemove 이벤트에 등록된 updateDrag에 의해서 호출됩니다.</p>
<ol>
<li>this.dragging이 설정되어 있지 않은 경우 startDrag를 호출합니다.</li>
<li>Droppables.show를 호출하여 현재 해당하는 Droppable이 있는 경우에 대한 처리를 수행합니다.</li>
<li>Draggable을 이동시킵니다.</li>
<li>options.scroll과 관련된 항목을 처리합니다.</li>
</ol>
<p><span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">6. </span></span>finishDrag(<span style="FONT-STYLE: italic">event, success</span>)<br />
- mouseup 또는 esc키가 눌린 경우 호출됩니다.</p>
<ol>
<li>this.dragging을 false로 설정합니다.</li>
<li>mouseup인 경우, Droppables.fire를 호출하여 Drop 이벤트에 대한 처리를 수행하게 합니다.</li>
<li>Draggables.notify를 호출해서 onEnd이벤트가 발생했음을 알립니다.</li>
<li>revert인 경우, startDrag시 저장하였던 시작점으로 복귀시킵니다.</li>
<li>drag가 완료되었으므로 zindex를 복원시킵니다.</li>
<li>endeffect설정이 되어있으면 이를 호출해줍니다.</li>
<li>Draggables.deactivate를 호출하여서 활성중인 Draggable이 없음을 설정합니다.</li>
</ol>
<p><span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">7. </span></span>keyProcess(<span style="FONT-STYLE: italic">event</span>) &#8211; esc키가 눌린 경우, finishDrag를 호출합니다.<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">8. </span></span>endDrag(<span style="FONT-STYLE: italic">event</span>) &#8211; mouseup이벤트가 발생한 경우, stopScrolling()과 finishDrag를 호출합니다.<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">9. </span></span>draw(<span style="FONT-STYLE: italic">point</span>)  &#8211; mouse 이동에 따른 draggable의 이동 처리를 수행합니다. (repaint코드라고 보시면 될 듯)<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">10. </span></span>stopScrolling()<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">11. </span></span>startScrolling(<span style="FONT-STYLE: italic">speed</span>)<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">12. </span></span>scroll()<br />
<span style="COLOR: #8e8e8e"><span style="FONT-WEIGHT: bold; COLOR: #000000">13. </span></span>_getWindowScroll(<span style="FONT-STYLE: italic">w</span>)</p>
<p>출처 : <a href="http://okjungsoo.tistory.com">http://okjungsoo.tistory.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://overfloweb.com/blog/index.php/archives/12/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

