JavaScript:帶框拖拽

承上:JavaScript-頁面內拖拽方框

帶框的拖拽,拖動紅色div時,div先不移動,而是出現一個虛線框,虛線框移動到哪兒,放開鼠標後div就移動到哪兒。效果如下:

總體思路:當鼠標按下時,創建一個虛線框box。鼠標移動時,將座標賦值給虛線框。鼠標方放開時,將虛線框的座標賦值給div,隨即刪除掉虛線框。示例代碼如下。

<!DOCTYPE html>
<html>
<head>
	<title>拖拽</title>
<style type="text/css">
	#div1{ height: 200px; width: 200px; background-color: red; position: absolute; }
	.box{ border:1px dashed black; position: absolute;}
</style>
<script type="text/javascript">
window.onload = function(){
	document.oncontextmenu = function(){
		return false;
	}
	var oDiv1 = document.getElementById('div1');

	var disX = 0;
	var disY = 0;

	oDiv1.onmousedown = function(ev){
		disX = ev.clientX - oDiv1.offsetLeft;
		disY = ev.clientY - oDiv1.offsetTop;

		var oBox = document.createElement('div');
		oBox.className = 'box';
		oBox.style.width = oDiv1.offsetWidth+'px';
		oBox.style.height = oDiv1.offsetHeight+'px';
		oBox.style.left = oDiv1.offsetLeft+'px';
		oBox.style.top = oDiv1.offsetTop+'px';
		document.body.appendChild(oBox);
		//當鼠標按下時,創建一個虛線框box,創建的虛線框的位置和div的位置一致。


		document.onmousemove = function(ev){
			var l = ev.clientX - disX;
			var t = ev.clientY - disY;
			if (l<30) {
				l = 0;
			} else if(l>document.documentElement.clientWidth-oDiv1.offsetWidth){
				l = document.documentElement.clientWidth-oDiv1.offsetWidth;
			}
			if (t<30) {
				t = 0;
			} else if(t>document.documentElement.clientHeight-oDiv1.offsetHeight){
				t = document.documentElement.clientHeight-oDiv1.offsetHeight;
			}
			
			oBox.style.left = l + 'px';
			oBox.style.top = t + 'px';
			//鼠標移動時,將座標賦值給虛線框。
		};

		document.onmouseup = function(){
			document.onmousemove = null;
			document.onmouseup = null;

			oDiv1.style.left = oBox.offsetLeft+'px';
			oDiv1.style.top = oBox.offsetTop+'px';
			document.body.removeChild(oBox);
			//鼠標方放開時,將虛線框的座標賦值給div,隨即刪除掉虛線框。
		};
		return false;
	};
};
</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章