首页 > 语言 > JavaScript > 正文

JavaScript实现DIV层拖动及动态增加新层的方法

2024-05-06 16:20:02
字体:
来源:转载
供稿:网友

这篇文章主要介绍了JavaScript实现DIV层拖动及动态增加新层的方法,设计javascript操作div层的拖动与增加的相关技巧,需要的朋友可以参考下

本文实例讲述了JavaScript实现DIV层拖动及动态增加新层的方法。分享给大家供大家参考。具体分析如下:

无刷新添加一个新的DIV层,并可实现的该层的拖动,鼠标拖动层可移动位置,将JS部分另存为一个新文件,用到的时候从外部引入,这个拖动层代码很流行,GG和YAHOO等大网站经常可以看到这种效果。

 

 
  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <title>DIV层拖动,动态增加新层的JavaScript</title> 
  5. <style> 
  6. body {margin:0px;padding:0px;font-size:12px;text-align:center;} 
  7. body > div {text-align:center; margin-right:auto; margin-left:auto;}  
  8. .content{width:900px;} 
  9. .content .left{ 
  10. float:left; 
  11. width:20%; 
  12. border:1px solid #0066CC; 
  13. margin:3px; 
  14. .content .center{ 
  15. float:left; 
  16. border:1px solid #FF0000; 
  17. margin:3px; 
  18. width:57% 
  19. .content .right{ 
  20. float:right; 
  21. width:20%; 
  22. border:1px solid #FF0000; 
  23. margin:3px 
  24. .mo{ 
  25. height:auto; 
  26. border:1px solid #CCC; 
  27. margin:3px; 
  28. background:#FFF 
  29. .mo h1{ 
  30. background:#ECF9FF; 
  31. height:18px; 
  32. padding:3px; 
  33. cursor:move 
  34. .closediv{ 
  35. cursor:default
  36. .minusspan{ 
  37. cursor:default
  38. .mo .nr{ 
  39. height:80px; 
  40. border:1px solid #F3F3F3; 
  41. margin:2px 
  42. h1{ 
  43. margin:0px; 
  44. padding:0px; 
  45. text-align:left; 
  46. font-size:12px 
  47. .dragging { 
  48. FILTER: progid:DXImageTransform.Microsoft.Alpha(opacity=60); 
  49. opacity: 0.6; 
  50. moz-opacity: 0.6 
  51. </style> 
  52. <script language="javascript"
  53. var dragobj={} 
  54. window.onerror=function(){return false
  55. var domid=12 
  56. function on_ini(){ 
  57. String.prototype.inc=function(s){return this.indexOf(s)>-1?true:false
  58. var agent=navigator.userAgent 
  59. window.isOpr=agent.inc("Opera"
  60. window.isIE=agent.inc("IE") && !isOpr 
  61. window.isMoz=agent.inc("Mozilla") && !isOpr && !isIE 
  62. if(isMoz){ 
  63. Event.prototype.__defineGetter__("x",function(){return this.clientX+2}) 
  64. Event.prototype.__defineGetter__("y",function(){return this.clientY+2}) 
  65. basic_ini() 
  66. function basic_ini(){ 
  67. window.$=function(obj){return typeof(obj)=="string"?document.getElementById(obj):obj} 
  68. window.oDel=function(obj){if($(obj)!=null){$(obj).parentNode.removeChild($(obj))}} 
  69. window.oDel=function(obj){if($(obj)!=null){$(obj).parentNode.removeChild($(obj))}} 
  70. window.onload=function(){ 
  71. on_ini() 
  72. var o=document.getElementsByTagName("h1"
  73. for(var i=0;i<o.length;i++){ 
  74. o[i].onmousedown=addevent; 
  75. //添加折叠和关闭按钮 
  76. var tt = document.createElement("div"); 
  77. tt.style.cssText = "float:left"
  78.  
  79. var span = document.createElement("span"); 
  80. span.innerHTML = "--"+o[i].innerHTML; 
  81. span.style.cssText = "cursor:default;"
  82. span.onmousedown = minusDiv; 
  83. tt.appendChild(span); 
  84.  
  85. var close = document.createElement("div"); 
  86. close.innerHTML = "X"
  87. close.style.cssText = "cursor:default;float:right"
  88. close.onmousedown = closeDiv; 
  89. o[i].innerHTML = ""
  90. o[i].appendChild(tt); 
  91. o[i].appendChild(close); 
  92. //折叠或者显示层 
  93. function minusDiv(e) 
  94. e=e||event 
  95. var nr = this.parentNode.parentNode.nextSibling; //取得内容层 
  96. nr.style.display = nr.style.display==""?"none":""
  97. //移出层 
  98. function closeDiv(e) 
  99. e=e||event 
  100. var mdiv = this.parentNode.parentNode; //取得目标层 
  101. oDel(mdiv); 
  102. function addevent(e){ 
  103. if(dragobj.o!=null
  104. return false 
  105. e=e||event 
  106. dragobj.o=this.parentNode 
  107. dragobj.xy=getxy(dragobj.o) 
  108. dragobj.xx=new Array((e.x-dragobj.xy[1]),(e.y-dragobj.xy[0])) 
  109. //dragobj.o.className = 'dragging'; 
  110. dragobj.o.style.width=dragobj.xy[2]+"px" 
  111. dragobj.o.style.height=dragobj.xy[3]+"px" 
  112. dragobj.o.style.left=(e.x-dragobj.xx[0])+"px" 
  113. dragobj.o.style.top=(e.y-dragobj.xx[1])+"px" 
  114. dragobj.o.style.position="absolute" 
  115. dragobj.o.style.filter='alpha(opacity=60)'//添加拖动透明效果 
  116. var om=document.createElement("div"
  117. dragobj.otemp=om 
  118. om.style.width=dragobj.xy[2]+"px" 
  119. om.style.height=dragobj.xy[3]+"px" 
  120. om.style.border = "1px dashed red"//ikaiser添加,实现虚线框 
  121. dragobj.o.parentNode.insertBefore(om,dragobj.o) 
  122. return false 
  123. document.onselectstart=function(){return false
  124. window.onfocus=function(){document.onmouseup()} 
  125. window.onblur=function(){document.onmouseup()} 
  126. document.onmouseup=function(){ 
  127. if(dragobj.o!=null){ 
  128. dragobj.o.style.width="auto" 
  129. dragobj.o.style.height="auto" 
  130. dragobj.otemp.parentNode.insertBefore(dragobj.o,dragobj.otemp) 
  131. dragobj.o.style.position="" 
  132. oDel(dragobj.otemp) 
  133. dragobj={} 
  134. document.onmousemove=function(e){ 
  135. e=e||event 
  136. if(dragobj.o!=null){ 
  137. dragobj.o.style.left=(e.x-dragobj.xx[0])+"px" 
  138. dragobj.o.style.top=(e.y-dragobj.xx[1])+"px" 
  139. createtmpl(e, dragobj.o) //传递当前拖动对象 
  140. function getxy(e){ 
  141. var a=new Array() 
  142. var t=e.offsetTop; 
  143. var l=e.offsetLeft; 
  144. var w=e.offsetWidth; 
  145. var h=e.offsetHeight; 
  146. while(e=e.offsetParent){ 
  147. t+=e.offsetTop; 
  148. l+=e.offsetLeft; 
  149. a[0]=t;a[1]=l;a[2]=w;a[3]=h 
  150. return a; 
  151. function inner(o,e){ 
  152. var a=getxy(o) 
  153. if(e.x>a[1] && e.x<(a[1]+a[2]) && e.y>a[0] && e.y<(a[0]+a[3])){ 
  154. if(e.y<(a[0]+a[3]/2)) 
  155. return 1; 
  156. else 
  157. return 2; 
  158. }else 
  159. return 0; 
  160. //将当前拖动层在拖动时可变化大小,预览效果 
  161. function createtmpl(e, elm){ 
  162. for(var i=0;i<domid;i++){ 
  163. if(document.getElementById("m"+i) == null//已经移出的层不再遍历 
  164. continue
  165. if($("m"+i)==dragobj.o) 
  166. continue 
  167. var b=inner($("m"+i),e) 
  168. if(b==0) 
  169. continue 
  170. dragobj.otemp.style.width=$("m"+i).offsetWidth 
  171. elm.style.width = $("m"+i).offsetWidth; 
  172. //1为下移,2为上移 
  173. if(b==1){ 
  174. $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i)) 
  175. }else
  176. if($("m"+i).nextSibling==null){ 
  177. $("m"+i).parentNode.appendChild(dragobj.otemp) 
  178. }else
  179. $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i).nextSibling) 
  180. return 
  181. for(var j=0;j<3;j++){ 
  182. if($("dom"+j).innerHTML.inc("div")||$("dom"+j).innerHTML.inc("DIV")) 
  183. continue 
  184. var op=getxy($("dom"+j)) 
  185. if(e.x>(op[1]+10) && e.x<(op[1]+op[2]-10)){ 
  186. $("dom"+j).appendChild(dragobj.otemp) 
  187. dragobj.otemp.style.width=(op[2]-10)+"px" 
  188. function add_div() 
  189. var o=document.createElement("div"
  190. o.className="mo" 
  191. o.id="m"+domid 
  192. $('dom0').appendChild(o) 
  193. o.innerHTML="<h1>dom"+domid+"</h1><div class=nr></div>" 
  194. o.getElementsByTagName("h1")[0].onmousedown=addevent 
  195. domid++ 
  196. </script> 
  197. </head> 
  198. <body> 
  199. <INPUT TYPE="button" value="添加一个新的DIV层" onclick="add_div();"
  200. <div class=content> 
  201. <div class=left id=dom0> 
  202. <div class=mo id=m0> 
  203. <h1>dom0</h1> 
  204. <div class="nr"></div> 
  205. </div> 
  206. <div class=mo id=m1> 
  207. <h1>dom1</h1><div class="nr"></div> 
  208. </div> 
  209. <div class=mo id=m2><h1>dom2</h1><div class="nr"></div></div> 
  210. <div class=mo id=m3><h1>dom3</h1><div class="nr"></div></div> 
  211. </div> 
  212. <div class=center id=dom1> 
  213. <div class=mo id=m4><h1>dom4</h1><div class="nr"></div></div> 
  214. <div class=mo id=m5><h1>dom5</h1><div class="nr"></div></div> 
  215. </div> 
  216. <div class=right id=dom2> 
  217. <div class=mo id=m8><h1>dom8</h1><div class="nr"></div></div> 
  218. <div class=mo id=m9><h1>dom9</h1><div class="nr"></div></div> 
  219. </div> 
  220. </div> 
  221. </body> 
  222. </html> 

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选