`
thomas0988
  • 浏览: 486615 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

div 拖动例子

 
阅读更多

第一个是简单的例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
	<title>dragTest</title>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8">

	<script type="text/javascript">

	var isDrag=0;//是否可拖动标志,可拖动为1,不可拖动为2
	var divAndMouseX;//鼠标落点距离div左上角x坐标的差距
	var divAndMouseY;//鼠标落点距离div左上角y坐标的差距
	var divMove;
	//鼠标按下时
	function down(div){//鼠标按下
		isDrag=1;//将div设置为可拖动
		divMove=div;//用于下边拖动时的定位(新的位置的坐标)
		//首先计算鼠标与拖动对象左上角的坐标差,然后在下边拖动方法中,用鼠标的坐标减坐标差就是新位置的坐标了
		divAndMouseX=event.clientX-parseInt(div.style.left);
		divAndMouseY=event.clientY-parseInt(div.style.top);
	}
	function move(){//拖动过程计算div坐标
		if(isDrag==1){
			divMove.style.left=event.clientX-divAndMouseX;
			divMove.style.top=event.clientY-divAndMouseY;
		}
	}

	function up(){//放开鼠标将div设置为不可拖动
		isDrag=0;
	}
</script>
	</head>

	<body>
		<div id="divtest" onmousedown="down(this)" onmousemove="move()"
			onmouseup="up()"
			style="cursor: move; border: 1px dashed blue; background-color: lightblue; width: 50px; height: 50px; position: absolute; left: 100px; top: 50px;">
			<table width="100%" height="100%">
				<tr>
					<td>
						test
					</td>
				</tr>
			</table>
		</div>
	</body>
</html>

 

第二个是进阶例子:

<html> 
<head> 
<title>Div拖动/调整大小实例</title> 
</head> 
<script type="text/javascript"> 
//保留的位置 
var saveLeft,saveTop,saveWidth,saveHeight; 
var theBody; 
var eventType;     //事件种类, "move"、"resize" 
var div;

//创建并设定div的参数 
function setDiv() 
{ 
   //防止重复打开 
   if (div) 
   { 
   return; 
   } 
   var newLeft,newTop,newWidth,newHeight; 
   theBody = document.body; 
   
   div = document.createElement("div"); 
   div.id = "panelDiv"; 
   div.style.position = "absolute"; 
   div.style.backgroundColor = "#E5E5E5" 
   div.style.padding = "2px 5px 5px 2px"; 
   div.style.overflow = "hidden"; 
   div.style.zIndex = 1; 
   
   //设定打开的大小和位置 
   Function() 
   { 
   var openType = document.getElementById("radio1").checked ? 0 : 1; 
   if (openType == 0)   //默认大小默认位置居中打开 
   { 
     newWidth = "300px"; 
     newHeight = "300px"; 
     newLeft = (theBody.clientWidth - parseInt(newWidth)) / 2 + "px"; 
     newTop = (theBody.clientHeight - parseInt(newHeight)) / 2 + "px"; 
   } 
   else //存储的位置与大小 
   { 
     newWidth = saveWidth ? saveWidth : "300px"; 
     newHeight = saveHeight ? saveHeight : "300px"; 
     newLeft = saveLeft ? saveLeft : (theBody.clientWidth - parseInt(newWidth)) / 2 + "px"; 
     newTop = saveTop ? saveTop : (theBody.clientHeight - parseInt(newHeight)) / 2 + "px"; 
   } 
   div.style.width = newWidth; 
   div.style.height = newHeight; 
   div.style.left = newLeft; 
   div.style.top = newTop; 
   } 
   div = setChild(div); 
   theBody.appendChild(div); 
   
   var ipt = document.getElementsByTagName("input"); 
   for(var i = 0; i < ipt.length; i++) 
   { 
   ipt[i].disabled = true; 
   } 
}

function setChild(div) 
{ 
   //可否移动、调整 
   var isMove = document.getElementById("isMove").checked; 
   var isResize = document.getElementById("isResize").checked; 
   
   //底色 
   var cDiv = document.createElement; 
   var backDiv = cDiv("div"); 
   backDiv.style.cssText = "left: 0px; top: 0px; width: 100%; height: 100%; background-color: #F5F5F5;"; 
   div.appendChild(backDiv); 
   
   //标题 
   var topDiv = cDiv("div"); 
   topDiv.style.cssText = "left: 2px; top: 2px; width: 100%; height: 30px; position: absolute; background-color: #78ABFF; vertical-align: middle; z-index: 5"; 
   if (isMove) 
   { 
   topDiv.style.cursor = "move"; 
   topDiv.setAttribute("onmousedown", function(){setMove(this)}); 
   } 
   else 
   { 
   topDiv.style.cursor = "default"; 
   } 
   topDiv.innerHTML = "<span style='top: 5px; left:5px; font-size: 20px; font-weight: bold; color: #102548; position: relative;' onselectstart='return false'>标题栏</span>"; 
   div.appendChild(topDiv); 
   
   //关闭按钮 
   var closeDiv = cDiv("div"); 
   closeDiv.style.cssText = "right: 8px; top : 5px; width: 24px; height: 24px; position: absolute; background-color: #E4EEFF; border: #2D66C4 1px solid; text-align: center; vertical-align: middle; cursor: pointer; z-index: 10"; 
   closeDiv.setAttribute("onclick", function() {eCloseDiv()}); 
   closeDiv.innerHTML = "<span style='font-size: 20px; font-weight: bold; color: #0E377A;' title='Esc快捷键'>×</span>"; 
   div.appendChild(closeDiv); 
   
   //内容 
   var contentDiv = cDiv("div"); 
   contentDiv.style.cssText = "left: 2px; top: 35px; width: 100%; position: absolute; overflow: auto"; 
   contentDiv.style.height = (parseInt(div.style.height) - 40) + "px"; 
   contentDiv.innerHTML = "<table style='width: 100%; height: 100%; text-align: center; vertical-align: hidden'><tr><td><p>这里是内容区!</p><a href='javascript:saveDiv()'>保留这个位置和大小</a></td></tr></table>"; 
   div.appendChild(contentDiv); 
   
   //调整大小 
   var reDiv = cDiv("div"); 
   reDiv.style.cssText = "right: 0px; bottom: 0px; width: 5px; height: 5px; position: absolute;"; 
   if (isResize) 
   { 
   reDiv.style.cursor = "se-resize"; 
   reDiv.setAttribute("onmousedown", function(){setResize(this)}); 
   } 
   else 
   { 
   reDiv.style.cursor = "default"; 
   } 
   div.appendChild(reDiv); 
   
   return div; 
}

var oX, oY, oLeft, oTop, oWidth, oHeight; //存储原始移动前的位置 
var divClone, oDiv;   //克隆的节点和原始节点 
var oTime; 
//clone拖移的节点 
function setMove(obj) 
{ 
   if (event.button == 1) 
   { 
   if (oTime) 
   { 
     clearTimeout(oTime); 
     divClone.parentNode.removeChild(divClone); 
   } 
   oDiv = obj.parentNode; 
   divClone = oDiv.cloneNode(true); 
   divClone.style.filter = "Alpha(opacity=50)"; 
   divClone.childNodes[1].setAttribute("onmousemove", function(){startMove(this)}); 
   divClone.childNodes[1].setAttribute("onmouseup", function(){endMove()}); 
   oX = parseInt(event.clientX); 
   oY = parseInt(event.clientY); 
   oLeft = parseInt(divClone.style.left); 
   oTop = parseInt(divClone.style.top); 
   document.body.appendChild(divClone); 
   divClone.childNodes[1].setCapture(); 
   eventType = "move"; 
   } 
}

//拖移 
function startMove(obj) 
{ 
   if (eventType == "move" && event.button == 1) 
   { 
   var moveDiv = obj.parentNode; 
   moveDiv.style.left = (oLeft + event.clientX - oX) + "px"; 
   moveDiv.style.top = (oTop + event.clientY - oY) + "px"; 
   } 
}

//拖移结束调用动画 
function endMove() 
{ 
   if (eventType == "move") 
   { 
   divClone.childNodes[1].releaseCapture(); 
             move(parseInt(divClone.style.left), parseInt(divClone.style.top)); 
   eventType = ""; 
   } 
}

//移动的动画 
function move(aimLeft, aimTop) 
{ 
   var nowLeft = parseInt(oDiv.style.left); 
   var nowTop = parseInt(oDiv.style.top); 
   var moveSize = 30; 
   if (nowLeft > aimLeft + moveSize || nowLeft < aimLeft - moveSize || nowTop > aimTop + moveSize || nowTop < aimTop - moveSize) 
   { 
   oDiv.style.left = aimLeft > nowLeft + moveSize ? (nowLeft + moveSize) + "px" : aimLeft < nowLeft - moveSize ? (nowLeft - moveSize) + "px" : nowLeft + "px"; 
   oDiv.style.top = aimTop > nowTop + moveSize ? (nowTop + moveSize) + "px" : aimTop < nowTop - moveSize ? (nowTop - moveSize) + "px" : nowTop + "px"; 
   oTime = setTimeout("move(" + aimLeft + ", " + aimTop + ")", 1); 
   } 
   else 
   { 
   oDiv.style.left = divClone.style.left; 
   oDiv.style.top = divClone.style.top; 
   divClone.parentNode.removeChild(divClone); 
   divClone == null; 
   } 
}

//clone调整大小的节点 
function setResize(obj) 
{ 
   if (event.button == 1) 
   { 
   if (oTime) 
   { 
     clearTimeout(oTime); 
     divClone.parentNode.removeChild(divClone); 
   } 
   oDiv = obj.parentNode; 
   divClone = oDiv.cloneNode(true); 
   divClone.style.filter = "Alpha(opacity=50)"; 
   divClone.childNodes[4].setAttribute("onmousemove", function(){startResize(this)}); 
   divClone.childNodes[4].setAttribute("onmouseup", function(){endResize()}); 
   oX = parseInt(event.clientX); 
   oY = parseInt(event.clientY); 
   oWidth = parseInt(divClone.style.width); 
   oHeight = parseInt(divClone.style.height); 
   document.body.appendChild(divClone); 
   divClone.childNodes[4].setCapture(); 
   eventType = "resize"; 
   } 
}

//拖动调整大小 
function startResize(obj) 
{ 
   if (eventType == "resize" && event.button == 1) 
   { 
   var nX = event.clientX; 
   var nY = event.clientY; 
   if (nX > oX - oWidth && nY > oY - oHeight + 40) 
   { 
     var resizeDiv = obj.parentNode; 
     resizeDiv.style.width = (oWidth + event.clientX - oX) + "px"; 
     resizeDiv.style.height = (oHeight + event.clientY - oY) + "px"; 
     resizeDiv.childNodes[3].style.height = (parseInt(resizeDiv.style.height) - 40) + "px"; 
   } 
   } 
}

//调整大小结束 
function endResize() 
{ 
   if (eventType == "resize") 
   { 
   divClone.childNodes[4].releaseCapture(); 
             resize(parseInt(divClone.style.width), parseInt(divClone.style.height)); 
   eventType = ""; 
   } 
}

//调整大小的动画 
function resize(aimWidth, aimHeight) 
{ 
   var nowWidth = parseInt(oDiv.style.width); 
   var nowHeight = parseInt(oDiv.style.height); 
   var resizeSize = 30; 
   if (nowWidth > aimWidth + resizeSize || nowWidth < aimWidth - resizeSize || nowHeight > aimHeight + resizeSize || nowHeight < aimHeight - resizeSize) 
   { 
   oDiv.style.width = aimWidth > nowWidth + resizeSize ? (nowWidth + resizeSize) + "px" : aimWidth < nowWidth - resizeSize ? (nowWidth - resizeSize) + "px" : nowWidth + "px"; 
   oDiv.style.height = aimHeight > nowHeight + resizeSize ? (nowHeight + resizeSize) + "px" : aimHeight < nowHeight - resizeSize ? (nowHeight - resizeSize) + "px" : nowHeight + "px"; 
   oDiv.childNodes[3].style.height = (parseInt(oDiv.style.height) - 40) + "px"; 
   oTime = setTimeout("resize(" + aimWidth + ", " + aimHeight + ")", 1); 
   } 
   else 
   { 
   oDiv.style.width = divClone.style.width; 
   oDiv.style.height = divClone.style.height; 
   oDiv.childNodes[3].style.height = (parseInt(oDiv.style.height) - 40) + "px"; 
   divClone.parentNode.removeChild(divClone); 
   divClone == null; 
   } 
}

//关闭DIV 
function eCloseDiv() 
{ 
   if (div) 
   { 
   div.parentNode.removeChild(div); 
   var ipt = document.getElementsByTagName("input"); 
   for(var i = 0; i < ipt.length; i++) 
   { 
     ipt[i].disabled = false; 
   } 
   div = null; 
   } 
}

//保留位置和大小 
function saveDiv() 
{ 
   if (div) 
   { 
   saveLeft = div.style.left; 
   saveTop = div.style.top; 
   saveWidth = div.style.width; 
   saveHeight = div.style.height; 
   alert("保留成功!"); 
   } 
}

//快捷键 
document.onkeydown = function() 
{ 
   event.keyCode == 27 ? eCloseDiv() : null;   //Esc快捷键 
   event.ctrlKey && (event.keyCode == 83 || event.keyCode == 115) ? saveDiv() : null; //ctrl+s保存位置 
   event.ctrlKey && event.keyCode == 13 ? setDiv() : null //ctrl+enter打开Div 
   !event.ctrlKey && (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) ? arrowMove(event.keyCode) : null; 
   event.ctrlKey && (event.keyCode == 37   || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) ? arrowResize(event.keyCode) : null; 
}

//上下左右箭头移动div 
function arrowMove(eKeyCode) 
{ 
   if (div) 
   { 
   var isMove = document.getElementById("isMove").checked; 
   if (isMove) 
   { 
     switch(eKeyCode) 
     { 
     case 37: 
       div.style.left = (parseInt(div.style.left) - 1) + "px"; //left 
       break 
     case 38: 
       div.style.top = (parseInt(div.style.top) - 1) + "px"; //up 
       break 
     case 39: 
       div.style.left = (parseInt(div.style.left) + 1) + "px"; //right 
       break 
     case 40: 
       div.style.top = (parseInt(div.style.top) + 1) + "px"; //down 
       break 
     } 
   } 
   } 
}

//ctrl+上下左右箭头调整div大小 
function arrowResize(eKeyCode) 
{ 
   if (div) 
   { 
   var isResize = document.getElementById("isResize").checked; 
   if (isResize) 
   { 
     switch(eKeyCode) 
     { 
     case 37: 
       div.style.width = (parseInt(div.style.width) - 1) + "px"; //left 
       break 
     case 38: 
       div.style.height = (parseInt(div.style.height) - 1) + "px"; //up 
       break 
     case 39: 
       div.style.width = (parseInt(div.style.width) + 1) + "px"; //right 
       break 
     case 40: 
       div.style.height = (parseInt(div.style.height) + 1) + "px"; //down 
       break 
     } 
   } 
   } 
} 
</script> 
<body> 
<p> 
<input type="checkbox" id="isMove" /><label for="isMove">可移动</label>     
<input type="checkbox" id="isResize" /><label for="isResize">可调整大小</label>     
</p> 
   
<p> 
<input type="radio" name="radio" id="radio1" checked /><label for="radio1">默认居中打开</label>     
<input type="radio" name="radio" id="radio2" /><label for="radio2">保留位置上打开</label> 
</p> 
<p><a href="javascript:setDiv()">打开DIV</a></p> 
<p style="font-weight: bold">操作说明:</p> 
<ol> 
<li> 
   选中复选框(可移动、可调整大小)后,打开的DIV具有移动/调整大小的功能(此时移动/调整大小快捷键可使用);<br> 
   反之,不可移动/调整大小(此时移动/调整大小快捷键无效) 
</li> 
<li> 
   单选框默认居中打开选中,无论有无保存DIV位置和大小均以默认位置及大小打开DIV 
</li> 
<li> 
   单选框保留位置上打开选中,如果未发现保存记录以默认方式打开,否则以保存的位置及大小打开 
</li> 
<li> 
   如果选中可移动后,鼠标经过标题位置(蓝色背景)处会变成移动的图标,此时按住鼠标左键会产生一个半透明的DIV,按住鼠标不动拉动此半透明DIV会跟随移动,释放鼠标左键后会产生一段原始位置移动至半透明位置的动画,当动画重叠时,半透明的DIV将回收。 
</li> 
<li> 
   如果选中可调整大小后,鼠标经过整个DIV的最右下角处会变成伸缩的图标,此时按住鼠标左键会产生一个半透明的DIV,按住鼠标不动拉动此半透明DIV会随着移动而调整大小,释放鼠标左键后会产生一段原始大小伸缩至半透明大小的动画,当动画重叠时,半透明的DIV将回收。 
</li> 
<li> 
   DIV的右上角有关闭按钮,按下后DIV将remove 
</li> 
</ol> 
<p style="font-weight: bold"> 
快捷键说明: 
<ol> 
<li> 
   Ctrl + Enter : 打开div 
</li> 
<li> 
   Ctrl + s(大小写均可) : 保存div的大小和位置 
</li> 
<li> 
   上下左右箭头 : 轻移div位置 
</li> 
<li> 
   Ctrl + 上下左右箭头 : 轻调div大小 
</li> 
<li> 
   Esc : 关闭Div 
</li> 
</ol> 
</p> 
</body> 
</html>

 

 

分享到:
评论

相关推荐

    Ext div拖动demo

    总结来说,"Ext div拖动demo"是一个使用Ext JS库和JavaScript实现的&lt;div&gt;元素上下拖动的示例,它展示了如何利用Web技术创建动态、交互式的用户界面。通过理解并应用这些知识,开发者可以提升Web应用的用户体验,并在...

    js控制多个div拖拽和拖动、且能保存数据至cookie、数据库、xml

    本示例涉及的主题是“js控制多个div拖拽和拖动、且能保存数据至cookie、数据库、xml”,这是一项实用技术,尤其适用于创建交互性强的Web 2.0应用程序。下面将详细介绍这一主题的相关知识点。 首先,让我们了解...

    div 拖动改变位置

    在网页设计和开发中,"div 拖动 交换位置"是一个常见的交互功能,它允许用户通过拖动页面上的 div 元素来改变它们的位置,实现动态布局。这一功能通常涉及HTML、CSS以及JavaScript(可能包括jQuery或其他库)等技术...

    net Div 的例子

    总的来说,“net Div”的例子可能是关于如何使用HTML `div` 元素结合CSS和JavaScript实现响应式、可拖动的网络布局。这种技术广泛应用于现代网页设计,以提供良好的用户体验和适应各种设备的界面。通过深入学习和...

    Jquery弹出div层窗口以及div屏幕居中,背景滤镜效果,div拖拽效果

    在这个例子中,`#draggable`的div就可以被拖动了。 **总结** 以上就是关于“jQuery弹出div层窗口、div屏幕居中、背景滤镜效果和div拖拽效果”的核心知识点。通过熟练掌握这些技巧,开发者可以创建更富有互动性和...

    jQuery鼠标上下拖动div排序代码

    在实现div拖动排序的过程中,我们主要利用jQuery的事件绑定和DOM操作功能。 1. **基础准备**:在HTML文件(如index.html)中,我们需要创建一系列可以拖动的div元素,并为它们添加唯一的ID或类名以便后续处理。同时...

    .net js代码实现div拖拽功能

    在这个例子中,我们设置了一个id为"draggable"的div,并为其设置了可拖动属性`draggable="true"`,同时通过CSS赋予它一定的样式,使其易于识别。 接下来,我们需要编写JavaScript代码(这里以drag.js为例)来处理...

    可拖动div例子

    可拖动的div页面,可以做网站主页等页面

    jquery拖拽排序插件div自由拖动排序代码

    在这个例子中,div元素既是可拖动的元素,也可能作为接收拖放的区域,具体取决于你的应用需求。 为了实现div的拖动排序,我们需要做以下几步: 1. **选择元素**:首先,我们需要用jQuery选择那些可以被拖动的div...

    div拖拽 关键在于对谁添加onmousemove事件 1积分

    在描述中提到的两个例子,"拖动div 效果好.html"和"拖动div 效果差.html",可能分别展示了正确和错误的事件处理方式,以此对比和突出正确的实践。而"必看 对主要问题的简单阐释.txt"文件可能是对这个问题的详细解释...

    div,iframe拖动功能

    然后,我们为这个div添加拖动事件处理,实现与div拖动类似的功能。 通过以上代码,我们可以实现div和iframe的拖动功能。在实际项目中,可能需要进一步优化,比如添加边界检测以限制元素的拖动范围,或者使用CSS3的...

    jQuery拖动div元素标签

    在这个例子中,当用户点击“添加新div”按钮时,会在id为"container"的div内创建一个新的div,并通过`draggable()`使其可拖动。 **自定义div大小** 在HTML中,我们可以直接设置div的宽度和高度。例如: ```html ...

    JQuery拖拽DIV

    在网页开发中,动态交互效果往往能...本篇文章将深入讲解如何利用JQuery实现DIV元素的拖拽功能。 首先,确保在项目中引入了JQuery库。你可以通过CDN链接或者本地引入的方式添加JQuery到HTML文件中。例如: ```html ...

    JS 拖拽例子

    这个“JS 拖拽例子”是一个教学实例,旨在展示如何在网页上实现拖放操作。下面我们将详细讨论拖放的基本原理和实现步骤。 首先,拖放功能涉及到两个主要事件:`dragstart` 和 `drop`。当用户开始拖动一个元素时,会...

    php+mysql+js拖拽div实例

    **PHP + MySQL + JS 拖拽Div实例详解** 在Web开发中,用户交互性是提升用户体验的关键因素之一。拖拽功能(Drag and Drop)可以让用户通过鼠标直接操作页面元素,增强了网页的互动性。本实例将介绍如何使用PHP、...

    基于ext的div拖动

    "基于EXT的div拖动"是指利用EXTJS这一强大的JavaScript框架来实现这种功能。EXTJS是一个用于构建富客户端Web应用的前端框架,它提供了丰富的组件库、数据绑定机制以及强大的布局管理,使得开发者可以方便地创建出...

    js实现div拖动功能.rar

    以上就是使用纯JavaScript实现div拖动功能的基本步骤。在实际应用中,你可能还需要考虑更多细节,如阻止默认的文本选中行为、处理触摸设备的拖动等。此外,也可以借助像jQuery UI这样的库,它们提供了封装好的拖动...

    JS做的隐藏与显示DIV可拖动弹出层

    在"JS做的隐藏与显示DIV可拖动弹出层"这个实例中,我们将探讨如何利用JavaScript来创建一个可拖动的弹出层,并控制其显示与隐藏。 首先,让我们理解`div`层的隐藏与显示。在HTML中,我们创建一个`div`元素并为其...

    asp.net中实现可拖动div

    在这个例子中,我们创建了一个id为"draggable"的div,并使用jQuery监听鼠标事件。当鼠标按下时,我们记录div的初始位置和鼠标的位置。在鼠标移动时,我们根据鼠标的新位置更新div的位置。当鼠标松开时,结束拖动状态...

    jquery巧妙使用div例子

    在"jquery巧妙使用div例子"中,jQuery被用来处理div元素的行为,如监听用户的交互,改变div的状态,并执行相应的动画效果。 其次,jFrame是一个基于jQuery的插件,它提供了创建窗口式界面的能力。jFrame模仿了桌面...

Global site tag (gtag.js) - Google Analytics