实现DIV拖动
Ajax的到来让B/S中的客户端中开发有火了一把,网上出现了很多优秀的开源框架和UI,比较著名了有prototype,YUI,GWT等,但很多时候发现这些东西很难用到你的系统之中,有时候你的系统仅仅需要实现一两个UI功能,如果把整个架构都引入进来是不现实的。所以很多时候是需要自己动手去做一些工作。
现在弹出窗口在B/S系统中很受青睐,它有美观性和易用性等诸多特点,比如我用的sina 博客登陆窗口就是应用了弹出窗口。以前我们做弹出窗口只用一个window.open()搞定,但后来发现这种窗口有很多弊端,首先是界面的美观性差,其次是与主页面的交互性差(只有一个window.opener引用主页面)。所以在开发过程中要自己动手做一些这方面的事情。
于是很多人选择了用Div来实现但出窗口功能,用css来控制外观。但是,这对开发人员提出更高要求:窗口的定位、拖动、与主页面的交互等。。。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> <style type="text/css"> .winFrame{ position:absolute; border: outset gray 1px; height:400; width:500; } .winTitle{ position:absolute; border-bottom:1px solid black; width:100%; height:20px; cursor:move; } .winContent{ position:absolute; top:30px; width:100% padding: 10px; overflow: auto; } </style> <SCRIPT LANGUAGE="JavaScript"> function beginDrag(elem,event){ var deltaX = event.clientX - parseInt(elem.style.left); var deltaY = event.clientY - parseInt(elem.style.top); document.attachEvent("onmousemove",moveHandler); document.attachEvent("onmouseup",upHandler); event.cancelBubble = true; event.returnValue = false; function moveHandler(e){ if(!e) e = window.event; elem.style.left = (e.clientX - deltaX) + "px"; elem.style.top = (e.clientY - deltaY) + "px"; e.cancelBubble = true; } function upHandler(e){ if(!e) e = window.event; document.detachEvent("onmousemove",moveHandler); document.detachEvent("onmouseup",upHandler); e.cancelBubble = true; } } </SCRIPT> </HEAD> <div class="winFrame" style="left:50px;top:50px;"> <div class="winTitle" onmousedown="beginDrag(this.parentNode,event);"> 标题 </div> <div class="winContent"> 内容 </div> </div> <BODY> </BODY> </HTML>