IE4 Layer ²ø¾î ¿Å±â±âGo to Drag



IE4¿¡¼­µµ ²ø±â´Â mousemove¸¦ »ç¿ëÇÏ´Â °ÍÀº °°Áö¸¸, À̺¥Æ®°¡ ÀϾ´Â ¹üÀ§¸¦ ÁöÁ¤½Ã captureEvents¸¦ »ç¿ëÇÒ ÇÊ¿ä¾øÀÌ Object.À̺¥Æ®Çîµé·¯ ·Î ÇÏ¸é µË´Ï´Ù. ¼ø¼­´Â..

Object.onmousedown = À̺¥Æ®Çîµé·¯ ÇÔ¼ö
Object.onmouseup = À̺¥Æ®Çîµé·¯ ÇÔ¼ö
Object.onmousemove = À̺¥Æ®Çîµé·¯ ÇÔ¼ö

ÀÔ´Ï´Ù.

document.onmousemove = dragIt;
document.onmousedown = beginDrag;
document.onmouseup = endDrag;

oldX=oldY=newX=newY=0, dragThis=null;

<div id=DRAG1 style="position:absolute; width:100; left:100; top:100; 
		background-color:yellow; layer-background-color:yellow; clip:rect(0,100,100,0)"
	>div1 CSS Layer</div>
¾î¶² Object¿¡°Ô À̺¥Æ® ¹üÀ§¸¦ ÁöÁ¤½Ã captureEvents¸¦ ÁöÁ¤ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ´Ü¼øÈ÷ À̺¥Æ® Çîµé·¯¿¡ À̺¥Æ® Çîµé·¯ ÇÔ¼ö¸¦ ÁöÁ¤ÇÏ¸é µË´Ï´Ù. ¿ÜºÎº¯¼ö´Â NN4¿¡¼­¿Í ¸¶Âú°¡Áö·Î ¾²ÀÔ´Ï´Ù.
function beginDrag() {

	dragThis = event.srcElement; // (1)
    
        while (dragThis.id.indexOf("Drag") == -1) { // (2)
        	dragThis = dragThis.parentElement;
                if (dragThis == null) { return }
        }

        oldX = (event.clientX + document.body.scrollLeft); // (3)
        oldY = (event.clientY + document.body.scrollTop); 
}
ÁÖ¼® (1)¹øÀº ¸¶¿ì½º¸¦ ´­·¶À» ¶§ mousedown À̺¥Æ®°¡ ÀϾ´Â element(DRAG1)¸¦ ¿ÜºÎº¯¼ö¿¡ ÁöÁ¤ÇÕ´Ï´Ù.
ÁÖ¼® (2)¹øÀº »óÀ§¿¡ DRAG¶õ À̸§À» °¡Áö´Â position element°¡ ÀÖÀ¸¸é ±×°ÍÀ» dragÇ϶ó´Â °ÍÀÔ´Ï´Ù.
ÁÖ¼®(3)ÀÇ event.clientX´Â À̺¥Æ®°¡ ÀÏ¾î ³µÀ» ¶§ ÆäÀÌÁöÀÇ À§Ä¡ÀÔ´Ï´Ù. º¸ÀÌ´Â ÆäÀÌÁöÀÔ´Ï´Ù.

ÇÑ ÆäÀÌÁö°¡ ³Ñ¾î¼­ ½ºÅ©·Ñ ¹Ù°¡ »ý±â¸é document.body.scrollLeft ·Î ½ºÅ©·Ñ µÈ ¸¸Å­ÀÇ °Å¸®¸¦ °°ÀÌ ´õÇØ ÁÝ´Ï´Ù. ±×·¯¸é, ÆäÀÌÁö ¾î´À°÷ÀÌ¶óµµ À̺¥Æ®°¡ »ý±ä °÷ÀÇ ÁÂÇ¥¸¦ Á¤È®È÷ ¾Ë¼ö ÀÖ½À´Ï´Ù. scrollLeft, scrollTop°¡ Àû¿ëµÇ´Â ÅÃÀº BODY, BUTTON, DIV, FIELDSET, FRAME, IFRAME, IMG, MARQUEE, SPAN, TEXTAREA ÀÔ´Ï´Ù.

ÀÌ µÎ °¡Áö¸¦ ´õÇϸé NN4ÀÇ pageX¿Í °°´Ù°í ÇÒ¼ö ÀÖ½À´Ï´Ù.

function dragIt() {
        if (dragThis == null) { return };
    
        newX = (event.clientX + document.body.scrollLeft);
        newY = (event.clientY + document.body.scrollTop);

        var distanceX = (newX - oldX);
        var distanceY = (newY - oldY);

        oldX = newX;
        oldY = newY;
    
        dragThis.style.pixelLeft += distanceX; // (1)
        dragThis.style.pixelTop += distanceY;

        event.returnValue = false;
}
IE4¿¡¼­´Â layer¸¦ À̵¿ÇÏ´Â method°¡ ¾ø½À´Ï´Ù. Á÷Á¢ °ªÀ» ÁöÁ¤ÇÏ¸é °°Àº µ¿ÀÛÀ» ÇÕ´Ï´Ù. ÀÌ ¶§ÀÇ dragThis.style.pixelLeft ´Â left¿Í ´Ù¸¨´Ï´Ù. pixelLeft´Â ¼öÄ¡ °ªÀ̰í, left´Â ¼öÄ¡¿¡ "px"¸¦ ´õÇÑ ¹®ÀÚ¿­ °ªÀÔ´Ï´Ù. Áï, pixelLeft°¡ 100À» °¡Áö°í ÀÖÀ¸¸é left´Â "100px"¶ó´Â ¹®ÀÚ¿­À» °¡Áý´Ï´Ù.

±×¸®°í, ²ø±â¿¡¼­ left´Â µÇÁö ¾Ê¾Ò½À´Ï´Ù. clickÀ¸·Î Çѹø À̵¿ÇÏ´Â °ÍÀº µÇ¾ú½À´Ï´Ù. IE4¿¡¼­ position elementÀÇ À§Ä¡¸¦ À̵¿ÇÒ ¶§´Â pixelLeft, pixelTopÀ» »ç¿ëÇϼ¼¿ä.

function endDrag() {
        dragThis = null;
}
¸¶¿ì½º ¹öưÀ» ³õÀ¸¸é ²ø±âÇÒ Object¸¦ ¾ø¿¡ ¹ö¸³´Ï´Ù.

document.onmousemove = null; ·Î ÇØÁ¦ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. À̰ÍÀ» ÇÏ¸é ´Ù½Ã ¸¶¿ì½º¸¦ ´­·¯µµ ²ø±â°¡ µÇÁö ¾Ê½À´Ï´Ù. µû¶ó¼­, onmousedown À̺¥Æ® Çîµé·¯ÀÇ ÁöÁ¤ÇÔ¼ö ¾È¿¡ document.onmousemove=dragIt;À» ÁöÁ¤ÇØ Áà¾ßÇÕ´Ï´Ù.

µÎ °¡Áö ¹æ¹ýÁß¿¡¼­ Çϳª¸¦ »ç¿ëÇÏ¸é µÇÁö¸¸, dragThis = null; ÀÌ ´õ °£´ÜÇÕ´Ï´Ù.

function beginDrag() {

	dragThis = event.srcElement; // (1)
                  
        while (dragThis.id.indexOf("Drag") == -1) { // (2)
        	dragThis = dragThis.parentElement;
                if (dragThis == null) { return }
        }

        oldX = (event.clientX + document.body.scrollLeft); // (3)
        oldY = (event.clientY + document.body.scrollTop); 
}
function dragIt() {

	if (dragThis == null) { return };
                  
        newX = (event.clientX + document.body.scrollLeft);
        newY = (event.clientY + document.body.scrollTop);

        var distanceX = (newX - oldX);
        var distanceY = (newY - oldY);

        oldX = newX;
        oldY = newY;
                  
        dragThis.style.pixelLeft += distanceX; // (1)
        dragThis.style.pixelTop += distanceY;
        
        event.returnValue = false;
}
function endDrag() {
	dragThis = null;
}
function setDrag() {
        document.onmousemove = dragIt;
        document.onmousedown = beginDrag;
        document.onmouseup = endDrag;

        oldX=oldY=newX=newY=0, dragThis=null;
}
</script>
</head>
<body onLoad="if(document.all) setDrag()">
<div id=DRAG1 style="position:absolute; width:100; left:100; top:100; 
    background-color:yellow; layer-background-color:yellow; clip:rect(0,100,100,0)"
>div1 CSS Layer</div>
½ÇÇà Çϱâ
IE4 Drag

   :)



T O P