Posted in Javascript onAugust 09, 2011
JScript 文件: //检测浏览器 MSIE Firefox var ie=false,moz=false; (function() {//check the browser var userAgent=navigator.userAgent; if(userAgent.indexOf("MSIE")!=-1) ie=true; else if(userAgent.indexOf("Firefox")!=-1) moz=true; })(); //通过ID获得对象 function $E_ID(idString) { return document.getElementById(idString); } //通过Name获得对象 function $Es_Tag(tagName) { return document.getElementsByTagName(tagName); } //获得对象绝对位置 obj.offsetparent function $GetInfo(o) { var to=new Object(); to.left=to.right=to.top=to.bottom=0; var twidth=o.offsetWidth; var theight=o.offsetHeight; while(o) { to.left+=o.offsetLeft; to.top+=o.offsetTop; o=o.offsetParent; } to.right=to.left+twidth; to.bottom=to.top+theight; return to; } //鼠标点击对象确发事件 function $hitTest(obj,event) { obj=$GetInfo(obj); var x=event.clientX; var y=event.clientY; if((x>=obj.left&&x<=obj.right)&&(y>=obj.top&&y<=obj.bottom)) return true; else return false; } function Drag(event) { this.dragged=false; this.ao=null; this.tdiv=null; this.fixLeft=0; this.fixTop=0; this.lastX=event.clientX; this.lastY=event.clientY; Drag.mm=null; this.dragStart=function(event) { this.ao=ie?event.srcElement:(moz?event.target:null); if(ie) document.body.onselectstart=function() { return false } if(moz&&this.ao.nodeType==3) this.ao=this.ao.parentNode; if(this.ao.tagName=="TD"||this.ao.tagName=="TR") this.ao=this.ao.offsetParent.parentNode; else return; if(this.ao.className!="dragdiv") return; this.tdiv=$E_ID("tmpdiv"); this.tdiv.style.visibility="visible"; this.tdiv.style.filter="alpha(opacity=70)"; if(ie) this.tdiv.filters.alpha.opacity=70; this.tdiv.style.opacity=0.7; this.tdiv.style.zIndex=100; this.tdiv.innerHTML=this.ao.innerHTML; this.tdiv.style.width=this.ao.offsetWidth+"px"; this.tdiv.style.height=this.ao.offsetHeight+"px"; this.tdiv.style.top=$GetInfo(this.ao).top+"px"; this.tdiv.style.left=$GetInfo(this.ao).left+"px"; this.fixTop=parseInt($GetInfo(this.tdiv).top); this.fixLeft=parseInt($GetInfo(this.tdiv).left); this.dragged=true; } this.onDrag=function(event) { if((!this.dragged)||this.ao==null)return; var tX=event.clientX; var tY=event.clientY; this.tdiv.style.left=parseInt(this.fixLeft+tX-this.lastX-document.body.scrollLeft)+"px"; this.tdiv.style.top=parseInt(this.fixTop+tY-this.lastY-document.body.scrollTop)+"px"; for(var m=0;m<$E_ID("root").rows.length;m++) { var rootCells=$E_ID("root").rows[m].cells; for(var i=0;i<rootCells.length;i++) { if($hitTest(rootCells[i],event)) { if(rootCells[i].hasChildNodes()) { for(var j=0;j<rootCells[i].childNodes.length;j++) { if($hitTest(rootCells[i].childNodes[j],event)) { rootCells[i].insertBefore(this.ao,rootCells[i].childNodes[j]); break; } } if(j==rootCells[i].childNodes.length) { rootCells[i].appendChild(this.ao);break; } break; } else { rootCells[i].appendChild(this.ao); break; } } } } } this.dragEnd=function() { if(this.dragged) { this.dragged=false; Drag.mm=this.repos(150,15,this); this.ao=null; } if(ie)document.body.onselectstart=function(){return true} } this.repos=function(aa,ab,obj) { if(ie)var f=obj.tdiv.filters.alpha.opacity; else if(moz)var f=obj.tdiv.style.opacity*100; var kf=f/ab; var tl=parseInt($GetInfo(obj.tdiv).left); var tt=parseInt($GetInfo(obj.tdiv).top); var kl=(tl-$GetInfo(obj.ao).left)/ab; var kt=(tt-$GetInfo(obj.ao).top)/ab; return setInterval(function(){ if(ab<1) { clearInterval(Drag.mm); obj.tdiv.style.visibility="hidden"; obj.tdiv.style.zIndex=""; return; } ab--; tl-=kl; tt-=kt; f-=kf; obj.tdiv.style.left=parseInt(tl)+"px"; obj.tdiv.style.top=parseInt(tt)+"px"; if(ie)obj.tdiv.filters.alpha.opacity=f; else if(moz)obj.tdiv.style.opacity=f/100; },aa/ab ); } } var tDrag=null; function init(event) { // alert(event.target.innerHTML); tDrag=new Drag(event); tDrag.dragStart(event); } function move(event) { if(tDrag!=null)tDrag.onDrag(event); } function end() { if(tDrag!=null){ tDrag.dragEnd(); tDrag=null; } } Asp.net文件: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Div拖动</title> <style type="text/css"> <!-- .dragHeader { background-color:#e5eef9; border-top:1px solid #0066FF; height: 20px; cursor: move; font-weight: bold; } body { font-family: Arial, Helvetica, sans-serif; font-size: 12px; } #root td { vertical-align:top; border:1px dotted #666666; } #tmpdiv { position: absolute; } .dragdiv { } .style1 { color: #FFFFFF; font-weight: bold; font-size: 36px; } --> </style> <script type="text/javascript" src="DivDrag.js"></script> </head> <body onMouseDown="init(event)" onMouseUp="end()" onMouseMove="move(event)" > <script language="javascript" type="text/javascript" > document.write("<div id='tmpdiv'><\/div>"); </script> <table id="root" style="width:600px;height:300px" cellpadding="0" cellspacing="1" > <tr style="height:150px;width:600px"> <td style="width:200px; height: 50px;"> <div class="dragdiv" id="div1" > <table style="height:100%;width:100%" border ="0"> <tr> <td> <input id="Button1" type="button" value="button" /> 可移动DIV1<br> 点击即可开始拖动! </td> </tr> </table> </div> </td> <td style="width:200px; height: 50px;"> <div class="dragdiv" id="div2" <table style="height:100%;width:100%" border ="0"> <tr> <td> <input id="Button2" type="button" value="button" /> 可移动DIV2<br> 点击即可开始拖动! </td> </tr> </table> </div> </td> <td style="width:200px; height: 50px;"> <div class="dragdiv" id="div3" <table style="height:100%;width:100%" border ="0"> <tr> <td> <input id="Button3" type="button" value="button" /> 可移动DIV3<br> 点击即可开始拖动! </td> </tr> </table> </div> </td> </tr> <tr style="height:150px;width:600px"> <td style="width:200px; height: 50px;"> </td> <td style="width:200px; height: 50px;"> </td> <td style="width:200px; height: 50px;"> </td> </tr> <tr style="height:150px;width:600px"> <td style="width:200px; height: 50px;"> </td> <td style="width:200px; height: 50px;"> </td> <td style="width:200px; height: 50px;"> </td> </tr> </table> </body> </html>
Javascript实现的类似Google的Div拖动效果代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@