当前位置: 代码迷 >> Web前端 >> 拖放 Drag and drop 步骤
  详细解决方案

拖放 Drag and drop 步骤

热度:675   发布时间:2012-09-27 11:11:17.0
拖放 Drag and drop 方法
虽然网上又很多实现方法,但是还是需要理解拖放原理。通过绑定onmousedown,onmousemove.onmouseup事件来实现层拖放位置变化,这只是很简单实现,可以去换个方法去实现。

<!DOCTYPE html>
<html>
<head>
<title>demo</title>
<style>
   .drag1 , .drag2{
	position:relative;
	width:200px;
	height:200px;
        line-height: 200px;
	text-align: center;
	vertical-align: middle;
	border-radius: 5px;
	border:1px solid red;
   }
</style>
</head>
<body>
<div id="drag1" class="drag1">
 drag layer
</div>
</body>
<script>
// drag and drap class
function DND(el){
  _startX = 0;            // mouse starting positions
  _startY = 0;
  _offsetX = 0;           // current element offset
  _offsetY = 0;
  _dragElement = el;      // needs to be passed from OnMouseDown to OnMouseMove
  _oldZIndex = 0;         // we temporarily increase the z-index during drag
}

DND.prototype = {
        init : function(){
            var _this = this;
            //replace with adeventListeners or attachEvent
	    document.onmousedown = function(e){_this.onMouseDown(e)};
	    document.onmouseup = function(e){_this.onMouseUp(e)};		
	},
	onMouseDown: function(e){
	      var even = e ? e : window.event;
	      var target = e.target ? e.target : e.srcElement;
	      if(e.button == 1 || e.button == 0){
	          _startX = even.clientX;
		  _startY = even.clientY;
		  _offsetX = this.parseMumber(target.style.left);
	          _offsetY = this.parseMumber(target.style.top);
		  _oldZindex = target.style.zIndex;
		  _dragElement = target;

		//replace with adeventListeners or attachEvent
		 document.onmousemove = this.onMouseMove;
                 // cancel out any text selections
                 document.body.focus();
                 // prevent text selection in IE
                 document.onselectstart = function () { return false; };
                 // prevent IE from trying to drag an image
                 target.ondragstart = function() { return false; };
		return false;
	      }		
	},
	onMouseMove: function(e){
	      var e = e ? e : window.event;
	      _dragElement.style.left = (_offsetX + e.clientX - _startX) + 'px';
	      _dragElement.style.top = (_offsetY + e.clientY - _startY) + 'px';
              _dragElement.style.cursor ="move";
		
	},
	onMouseUp: function(e){
	     if(_dragElement){
		//replace with adeventListeners or attachEvent
		document.onmousemove = null;
                document.onselectstart = null;
                _dragElement.ondragstart = null;
		_dragElement.style.cursor ="";	
		_dragElement = null;	
	     }
	},
	parseMumber: function(value){	
    		var n = parseInt(value);
    		return isNaN(n) ? 0 : n;		
	}
};

var dd1 = new DND(document.getElementById("drag1")).init();

</script>
</html>


参考:
http://www.cnblogs.com/Godblessyou/archive/2008/05/14/1196746.html
http://www.webreference.com/programming/javascript/mk/column2/
http://luke.breuer.com/tutorial/javascript-drag-and-drop-tutorial.aspx
http://www.quirksmode.org/js/dragdrop.html
  相关解决方案