首页 > 语言 > JavaScript > 正文

javascript实现漂亮的拖动层,窗口拖拽特效

2024-05-06 16:18:36
字体:大 中 小
来源:转载
供稿:网友

一个可关闭、可随意拖动位置的网页弹出层代码,美化的相当漂亮,简洁实用,还可拖动改变大小,通过八个方向改变大小,学习这类特效编写的网页设计者可参阅一下

javascript实现漂亮的拖动层,窗口拖拽特效

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <title>窗口拖拽(改变大小/最小化/最大化/还原/关闭)</title> 
  6. <style type="text/css">  
  7. body,div,h2{margin:0;padding:0;} 
  8. body{background:url(/jscss/demoimg/201205/bg.jpg);font:12px/1.5 /5fae/8f6f/96c5/9ed1;color:#333;} 
  9. #drag{position:absolute;top:100px;left:100px;width:300px;height:160px;background:#e9e9e9;border:1px solid #444;border-radius:5px;box-shadow:0 1px 3px 2px #666;} 
  10. #drag .title{position:relative;height:27px;margin:5px;} 
  11. #drag .title h2{font-size:14px;height:27px;line-height:24px;border-bottom:1px solid #A1B4B0;} 
  12. #drag .title div{position:absolute;height:19px;top:2px;right:0;} 
  13. #drag .title a,a.open{float:left;width:21px;height:19px;display:block;margin-left:5px;background:url(/jscss/demoimg/201205/tool.png) no-repeat;} 
  14. a.open{position:absolute;top:10px;left:50%;margin-left:-10px;background-position:0 0;} 
  15. a.open:hover{background-position:0 -29px;} 
  16. #drag .title a.min{background-position:-29px 0;} 
  17. #drag .title a.min:hover{background-position:-29px -29px;} 
  18. #drag .title a.max{background-position:-60px 0;} 
  19. #drag .title a.max:hover{background-position:-60px -29px;} 
  20. #drag .title a.revert{background-position:-149px 0;display:none;} 
  21. #drag .title a.revert:hover{background-position:-149px -29px;} 
  22. #drag .title a.close{background-position:-89px 0;} 
  23. #drag .title a.close:hover{background-position:-89px -29px;} 
  24. #drag .content{overflow:auto;margin:0 5px;} 
  25. #drag .resizeBR{position:absolute;width:14px;height:14px;right:0;bottom:0;overflow:hidden;cursor:nw-resize;background:url(/jscss/demoimg/201205/resize.png) no-repeat;} 
  26. #drag .resizeL,#drag .resizeT,#drag .resizeR,#drag .resizeB,#drag .resizeLT,#drag .resizeTR,#drag .resizeLB{position:absolute;background:#000;overflow:hidden;opacity:0;filter:alpha 
  27.  
  28.  
  29. (opacity=0);} 
  30. #drag .resizeL,#drag .resizeR{top:0;width:5px;height:100%;cursor:w-resize;} 
  31. #drag .resizeR{right:0;} 
  32. #drag .resizeT,#drag .resizeB{width:100%;height:5px;cursor:n-resize;} 
  33. #drag .resizeT{top:0;} 
  34. #drag .resizeB{bottom:0;} 
  35. #drag .resizeLT,#drag .resizeTR,#drag .resizeLB{width:8px;height:8px;background:#FF0;} 
  36. #drag .resizeLT{top:0;left:0;cursor:nw-resize;} 
  37. #drag .resizeTR{top:0;right:0;cursor:ne-resize;} 
  38. #drag .resizeLB{left:0;bottom:0;cursor:ne-resize;} 
  39. </style> 
  40. <script type="text/javascript">  
  41. /*-------------------------- + 
  42. 获取id, class, tagName 
  43. +-------------------------- */ 
  44. var get = { 
  45. byId: function(id) { 
  46. return typeof id === "string" ? document.getElementById(id) : id 
  47. }, 
  48. byClass: function(sClass, oParent) { 
  49. var aClass = []; 
  50. var reClass = new RegExp("(^| )" + sClass + "( |$)"); 
  51. var aElem = this.byTagName("*", oParent); 
  52. for (var i = 0; i < aElem.length; i++) reClass.test(aElem[i].className) && aClass.push(aElem[i]); 
  53. return aClass 
  54. }, 
  55. byTagName: function(elem, obj) { 
  56. return (obj || document).getElementsByTagName(elem) 
  57. } 
  58. }; 
  59. var dragMinWidth = 250; 
  60. var dragMinHeight = 124; 
  61. /*-------------------------- + 
  62. 拖拽函数 
  63. +-------------------------- */ 
  64. function drag(oDrag, handle) 
  65. { 
  66. var disX = dixY = 0; 
  67. var oMin = get.byClass("min", oDrag)[0]; 
  68. var oMax = get.byClass("max", oDrag)[0]; 
  69. var oRevert = get.byClass("revert", oDrag)[0]; 
  70. var oClose = get.byClass("close", oDrag)[0]; 
  71. handle = handle || oDrag; 
  72. handle.style.cursor = "move"; 
  73. handle.onmousedown = function (event) 
  74. { 
  75. var event = event || window.event; 
  76. disX = event.clientX - oDrag.offsetLeft; 
  77. disY = event.clientY - oDrag.offsetTop; 
  78.  
  79. document.onmousemove = function (event) 
  80. { 
  81. var event = event || window.event; 
  82. var iL = event.clientX - disX; 
  83. var iT = event.clientY - disY; 
  84. var maxL = document.documentElement.clientWidth - oDrag.offsetWidth; 
  85. var maxT = document.documentElement.clientHeight - oDrag.offsetHeight; 
  86.  
  87. iL <= 0 && (iL = 0); 
  88. iT <= 0 && (iT = 0); 
  89. iL >= maxL && (iL = maxL); 
  90. iT >= maxT && (iT = maxT); 
  91.  
  92. oDrag.style.left = iL + "px"; 
  93. oDrag.style.top = iT + "px"; 
  94.  
  95. return false 
  96. }; 
  97.  
  98. document.onmouseup = function () 
  99. { 
  100. document.onmousemove = null; 
  101. document.onmouseup = null; 
  102. this.releaseCapture && this.releaseCapture() 
  103. }; 
  104. this.setCapture && this.setCapture(); 
  105. return false 
  106. };  
  107. //最大化按钮 
  108. oMax.onclick = function () 
  109. { 
  110. oDrag.style.top = oDrag.style.left = 0; 
  111. oDrag.style.width = document.documentElement.clientWidth - 2 + "px"; 
  112. oDrag.style.height = document.documentElement.clientHeight - 2 + "px"; 
  113. this.style.display = "none"; 
  114. oRevert.style.display = "block"; 
  115. }; 
  116. //还原按钮 
  117. oRevert.onclick = function () 
  118. {  
  119. oDrag.style.width = dragMinWidth + "px"; 
  120. oDrag.style.height = dragMinHeight + "px"; 
  121. oDrag.style.left = (document.documentElement.clientWidth - oDrag.offsetWidth) / 2 + "px"; 
  122. oDrag.style.top = (document.documentElement.clientHeight - oDrag.offsetHeight) / 2 + "px"; 
  123. this.style.display = "none"; 
  124. oMax.style.display = "block"; 
  125. }; 
  126. //最小化按钮 
  127. oMin.onclick = oClose.onclick = function () 
  128. { 
  129. oDrag.style.display = "none"; 
  130. var oA = document.createElement("a"); 
  131. oA.className = "open"; 
  132. oA.href = "javascript:;"; 
  133. oA.title = "还原"; 
  134. document.body.appendChild(oA); 
  135. oA.onclick = function () 
  136. { 
  137. oDrag.style.display = "block"; 
  138. document.body.removeChild(this); 
  139. this.onclick = null; 
  140. }; 
  141. }; 
  142. //阻止冒泡 
  143. oMin.onmousedown = oMax.onmousedown = oClose.onmousedown = function (event) 
  144. { 
  145. this.onfocus = function () {this.blur()}; 
  146. (event || window.event).cancelBubble = true 
  147.  
  148. }; 
  149. } 
  150. /*-------------------------- + 
  151. 改变大小函数 
  152. +-------------------------- */ 
  153. function resize(oParent, handle, isLeft, isTop, lockX, lockY) 
  154. { 
  155. handle.onmousedown = function (event) 
  156. { 
  157. var event = event || window.event; 
  158. var disX = event.clientX - handle.offsetLeft; 
  159. var disY = event.clientY - handle.offsetTop; 
  160.  
  161. var iParentTop = oParent.offsetTop; 
  162. var iParentLeft = oParent.offsetLeft; 
  163. var iParentWidth = oParent.offsetWidth; 
  164. var iParentHeight = oParent.offsetHeight; 
  165. document.onmousemove = function (event) 
  166. { 
  167. var event = event || window.event; 
  168. var iL = event.clientX - disX; 
  169. var iT = event.clientY - disY; 
  170. var maxW = document.documentElement.clientWidth - oParent.offsetLeft - 2; 
  171. var maxH = document.documentElement.clientHeight - oParent.offsetTop - 2; 
  172. var iW = isLeft ? iParentWidth - iL : 
  173.  
  174. handle.offsetWidth + iL; 
  175. var iH = isTop ? iParentHeight - iT : handle.offsetHeight + iT; 
  176. isLeft && (oParent.style.left = iParentLeft + iL + "px"); 
  177. isTop && (oParent.style.top = iParentTop + iT + "px"); 
  178. iW < dragMinWidth && (iW = dragMinWidth); 
  179. iW > maxW && (iW = maxW); 
  180. lockX || (oParent.style.width = iW + "px"); 
  181. iH < dragMinHeight && (iH = dragMinHeight); 
  182. iH > maxH && (iH = maxH); 
  183. lockY || (oParent.style.height = iH + "px"); 
  184. if((isLeft && iW == dragMinWidth) || (isTop && iH == dragMinHeight)) document.onmousemove = null; 
  185.  
  186. return false;  
  187. }; 
  188. document.onmouseup = function () 
  189. { 
  190. document.onmousemove = null; 
  191. document.onmouseup = null; 
  192. }; 
  193. return false; 
  194. } 
  195. }; 
  196. window.onload = window.onresize = function () 
  197. { 
  198. var oDrag = document.getElementById("drag"); 
  199. var oTitle = get.byClass("title", oDrag)[0]; 
  200. var oL = get.byClass("resizeL", oDrag)[0]; 
  201. var oT = get.byClass("resizeT", oDrag)[0]; 
  202. var oR = get.byClass("resizeR", oDrag)[0]; 
  203. var oB = get.byClass("resizeB", oDrag)[0]; 
  204. var oLT = get.byClass("resizeLT", oDrag)[0]; 
  205. var oTR = get.byClass("resizeTR", oDrag)[0]; 
  206. var oBR = get.byClass("resizeBR", oDrag)[0]; 
  207. var oLB = get.byClass("resizeLB", oDrag)[0]; 
  208.  
  209. drag(oDrag, oTitle); 
  210. //四角 
  211. resize(oDrag, oLT, true, true, false, false); 
  212. resize(oDrag, oTR, false, true, false, false); 
  213. resize(oDrag, oBR, false, false, false, false); 
  214. resize(oDrag, oLB, true, false, false, false); 
  215. //四边 
  216. resize(oDrag, oL, true, false, false, true); 
  217. resize(oDrag, oT, false, true, true, false); 
  218. resize(oDrag, oR, false, false, false, true); 
  219. resize(oDrag, oB, false, false, true, false); 
  220.  
  221. oDrag.style.left = (document.documentElement.clientWidth - oDrag.offsetWidth) / 2 + "px"; 
  222. oDrag.style.top = (document.documentElement.clientHeight - oDrag.offsetHeight) / 2 + "px"; 
  223. } 
  224. </script> 
  225. </head> 
  226. <body> 
  227. <div id="drag"> 
  228. <div class="title"> 
  229. <h2>这是一个可以拖动的窗口</h2> 
  230. <div> 
  231. <a class="min" href="javascript:;" title="最小化"></a> 
  232. <a class="max" href="javascript:;" title="最大化"></a> 
  233. <a class="revert" href="javascript:;" title="还原"></a> 
  234. <a class="close" href="javascript:;" title="关闭"></a> 
  235. </div> 
  236. </div> 
  237. <div class="resizeL"></div> 
  238. <div class="resizeT"></div> 
  239. <div class="resizeR"></div> 
  240. <div class="resizeB"></div> 
  241. <div class="resizeLT"></div> 
  242. <div class="resizeTR"></div> 
  243. <div class="resizeBR"></div> 
  244. <div class="resizeLB"></div> 
  245. <div class="content"> 
  246. ① 窗口可以拖动;<br /> 
  247. ② 窗口可以通过八个方向改变大小;<br /> 
  248. ③ 窗口可以最小化、最大化、还原、关闭;<br /> 
  249. ④ 限制窗口最小宽度/高度。 
  250. </div>  
  251. </div> 
  252. </body> 
  253. </html> 

以上所述就是本文的全部内容了,希望大家能够喜欢。

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

图片精选