JavaScript拖拽實現(附註釋),最經典!最簡單!短小精悍!

來源:互聯網
上載者:User

文章轉載自:http://blog.csdn.net/sunxing007/archive/2009/04/22/4100840.aspx,由笑的自然最後編輯

效果預覽:

實現原始碼:
<html><br /><head><br /><title>Drag[笑的自然最後修改編輯]</title><br /></head><br /><body><br /><a href="http://blog.csdn.net/xxd851116" mce_href="http://blog.csdn.net/xxd851116">笑的自然最後修改編輯</a><br /><div id="r" style="position:absolute; left:100px; top:100px; background-color:#F00; height:80px; width:80px; cursor: pointer;"></div><br /><div id="g" style="position:absolute; left:250px; top:100px; background-color:#0F0; height:80px; width:80px; cursor: pointer;"></div><br /><div id="b" style="position:absolute; left:400px; top:100px; background-color:#00F; height:80px; width:80px; cursor: pointer;"></div><br /><mce:script type="text/javascript"><!--<br />var Drag = {<br />//當前被drag的對象<br />obj: null,<br />//初始化<br />init: function(id){<br />var o = document.getElementById(id);<br />//當onmousedown開始拖拽<br />o.onmousedown = Drag.start;<br />},<br />start: function(e){<br />var o = Drag.obj = this;<br />//lastMouseX,lastMouseY記錄上次滑鼠的位置<br />o.lastMouseX = Drag.getEvent(e).x;<br />o.lastMouseY = Drag.getEvent(e).y;<br />//當onmousemove開始移動<br />document.onmousemove = Drag.move;<br />//當onmouseup終止拖拽<br />document.onmouseup = Drag.end;<br />},<br />move: function(e){<br />var o = Drag.obj;<br />//dx, dy表示滑鼠移動的距離<br />var dx = Drag.getEvent(e).x - o.lastMouseX;<br />var dy = Drag.getEvent(e).y - o.lastMouseY;<br />//因為element.style.left通常返回的結果是'200px'的形式,所以要用parseInt轉化<br />var left = parseInt(o.style.left) + dx ;<br />var top = parseInt(o.style.top) + dy;<br />o.style.left = left;<br />o.style.top = top;<br />o.lastMouseX = Drag.getEvent(e).x;<br />o.lastMouseY = Drag.getEvent(e).y;<br />},<br />end: function(e){<br />document.onmousemove = null;<br />document.onMouseup = null;<br />Drag.obj = null;<br />},<br />//輔助函數,處理IE和FF不同的event模型<br />getEvent: function(e){<br />if (typeof e == 'undefined'){<br />e = window.event;<br />}<br />//alert(e.x?e.x : e.layerX);<br />if(typeof e.x == 'undefined'){<br />ee.x = e.layerX;//複製了n遍,到了csdn就變成ee.x了<br />}<br />if(typeof e.y == 'undefined'){<br />ee.y = e.layerY;//複製了n遍,到了csdn就變成ee.x了<br />}<br />return e;<br />}<br />};</p><p>//測試代碼開始,使三個div具有drag and drop的能力。<br />Drag.init('r');<br />Drag.init('g');<br />Drag.init('b');<br />// --></mce:script><br /></body><br /></html>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.