首页 > 语言 > 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. var dragMinWidth = 250; 
  59. var dragMinHeight = 124; 
  60. /*-------------------------- + 
  61. 拖拽函数 
  62. +-------------------------- */ 
  63. function drag(oDrag, handle) 
  64. var disX = dixY = 0; 
  65. var oMin = get.byClass("min", oDrag)[0]; 
  66. var oMax = get.byClass("max", oDrag)[0]; 
  67. var oRevert = get.byClass("revert", oDrag)[0]; 
  68. var oClose = get.byClass("close", oDrag)[0]; 
  69. handle = handle || oDrag; 
  70. handle.style.cursor = "move"
  71. handle.onmousedown = function (event) 
  72. var event = event || window.event; 
  73. disX = event.clientX - oDrag.offsetLeft; 
  74. disY = event.clientY - oDrag.offsetTop; 
  75.  
  76. document.onmousemove = function (event) 
  77. var event = event || window.event; 
  78. var iL = event.clientX - disX; 
  79. var iT = event.clientY - disY; 
  80. var maxL = document.documentElement.clientWidth - oDrag.offsetWidth; 
  81. var maxT = document.documentElement.clientHeight - oDrag.offsetHeight; 
  82.  
  83. iL <= 0 && (iL = 0); 
  84. iT <= 0 && (iT = 0); 
  85. iL >= maxL && (iL = maxL); 
  86. iT >= maxT && (iT = maxT); 
  87.  
  88. oDrag.style.left = iL + "px"
  89. oDrag.style.top = iT + "px"
  90.  
  91. return false 
  92. }; 
  93.  
  94. document.onmouseup = function () 
  95. document.onmousemove = null
  96. document.onmouseup = null
  97. this.releaseCapture && this.releaseCapture() 
  98. }; 
  99. this.setCapture && this.setCapture(); 
  100. return false 
  101. };  
  102. //最大化按钮 
  103. oMax.onclick = function () 
  104. oDrag.style.top = oDrag.style.left = 0; 
  105. oDrag.style.width = document.documentElement.clientWidth - 2 + "px"
  106. oDrag.style.height = document.documentElement.clientHeight - 2 + "px"
  107. this.style.display = "none"
  108. oRevert.style.display = "block"
  109. }; 
  110. //还原按钮 
  111. oRevert.onclick = function () 
  112. {  
  113. oDrag.style.width = dragMinWidth + "px"
  114. oDrag.style.height = dragMinHeight + "px"
  115. oDrag.style.left = (document.documentElement.clientWidth - oDrag.offsetWidth) / 2 + "px"
  116. oDrag.style.top = (document.documentElement.clientHeight - oDrag.offsetHeight) / 2 + "px"
  117. this.style.display = "none"
  118. oMax.style.display = "block"
  119. }; 
  120. //最小化按钮 
  121. oMin.onclick = oClose.onclick = function () 
  122. oDrag.style.display = "none"
  123. var oA = document.createElement("a"); 
  124. oA.className = "open"
  125. oA.href = "javascript:;"
  126. oA.title = "还原"
  127. document.body.appendChild(oA); 
  128. oA.onclick = function () 
  129. oDrag.style.display = "block"
  130. document.body.removeChild(this); 
  131. this.onclick = null
  132. }; 
  133. }; 
  134. //阻止冒泡 
  135. oMin.onmousedown = oMax.onmousedown = oClose.onmousedown = function (event) 
  136. this.onfocus = function () {this.blur()}; 
  137. (event || window.event).cancelBubble = true 
  138.  
  139. }; 
  140. /*-------------------------- + 
  141. 改变大小函数 
  142. +-------------------------- */ 
  143. function resize(oParent, handle, isLeft, isTop, lockX, lockY) 
  144. handle.onmousedown = function (event) 
  145. var event = event || window.event; 
  146. var disX = event.clientX - handle.offsetLeft; 
  147. var disY = event.clientY - handle.offsetTop; 
  148.  
  149. var iParentTop = oParent.offsetTop; 
  150. var iParentLeft = oParent.offsetLeft; 
  151. var iParentWidth = oParent.offsetWidth; 
  152. var iParentHeight = oParent.offsetHeight; 
  153. document.onmousemove = function (event) 
  154. var event = event || window.event; 
  155. var iL = event.clientX - disX; 
  156. var iT = event.clientY - disY; 
  157. var maxW = document.documentElement.clientWidth - oParent.offsetLeft - 2; 
  158. var maxH = document.documentElement.clientHeight - oParent.offsetTop - 2; 
  159. var iW = isLeft ? iParentWidth - iL : 
  160.  
  161. handle.offsetWidth + iL; 
  162. var iH = isTop ? iParentHeight - iT : handle.offsetHeight + iT; 
  163. isLeft && (oParent.style.left = iParentLeft + iL + "px"); 
  164. isTop && (oParent.style.top = iParentTop + iT + "px"); 
  165. iW < dragMinWidth && (iW = dragMinWidth); 
  166. iW > maxW && (iW = maxW); 
  167. lockX || (oParent.style.width = iW + "px"); 
  168. iH < dragMinHeight && (iH = dragMinHeight); 
  169. iH > maxH && (iH = maxH); 
  170. lockY || (oParent.style.height = iH + "px"); 
  171. if((isLeft && iW == dragMinWidth) || (isTop && iH == dragMinHeight)) document.onmousemove = null
  172.  
  173. return false;  
  174. }; 
  175. document.onmouseup = function () 
  176. document.onmousemove = null
  177. document.onmouseup = null
  178. }; 
  179. return false
  180. }; 
  181. window.onload = window.onresize = function () 
  182. var oDrag = document.getElementById("drag"); 
  183. var oTitle = get.byClass("title", oDrag)[0]; 
  184. var oL = get.byClass("resizeL", oDrag)[0]; 
  185. var oT = get.byClass("resizeT", oDrag)[0]; 
  186. var oR = get.byClass("resizeR", oDrag)[0]; 
  187. var oB = get.byClass("resizeB", oDrag)[0]; 
  188. var oLT = get.byClass("resizeLT", oDrag)[0]; 
  189. var oTR = get.byClass("resizeTR", oDrag)[0]; 
  190. var oBR = get.byClass("resizeBR", oDrag)[0]; 
  191. var oLB = get.byClass("resizeLB", oDrag)[0]; 
  192.  
  193. drag(oDrag, oTitle); 
  194. //四角 
  195. resize(oDrag, oLT, truetruefalsefalse); 
  196. resize(oDrag, oTR, falsetruefalsefalse); 
  197. resize(oDrag, oBR, falsefalsefalsefalse); 
  198. resize(oDrag, oLB, truefalsefalsefalse); 
  199. //四边 
  200. resize(oDrag, oL, truefalsefalsetrue); 
  201. resize(oDrag, oT, falsetruetruefalse); 
  202. resize(oDrag, oR, falsefalsefalsetrue); 
  203. resize(oDrag, oB, falsefalsetruefalse); 
  204.  
  205. oDrag.style.left = (document.documentElement.clientWidth - oDrag.offsetWidth) / 2 + "px"
  206. oDrag.style.top = (document.documentElement.clientHeight - oDrag.offsetHeight) / 2 + "px"
  207. </script> 
  208. </head> 
  209. <body> 
  210. <div id="drag"
  211. <div class="title"
  212. <h2>这是一个可以拖动的窗口</h2> 
  213. <div> 
  214. <a class="min" href="javascript:;" title="最小化"></a> 
  215. <a class="max" href="javascript:;" title="最大化"></a> 
  216. <a class="revert" href="javascript:;" title="还原"></a> 
  217. <a class="close" href="javascript:;" title="关闭"></a> 
  218. </div> 
  219. </div> 
  220. <div class="resizeL"></div> 
  221. <div class="resizeT"></div> 
  222. <div class="resizeR"></div> 
  223. <div class="resizeB"></div> 
  224. <div class="resizeLT"></div> 
  225. <div class="resizeTR"></div> 
  226. <div class="resizeBR"></div> 
  227. <div class="resizeLB"></div> 
  228. <div class="content"
  229. ① 窗口可以拖动;<br /> 
  230. ② 窗口可以通过八个方向改变大小;<br /> 
  231. ③ 窗口可以最小化、最大化、还原、关闭;<br /> 
  232. ④ 限制窗口最小宽度/高度。 
  233. </div>  
  234. </div> 
  235. </body> 
  236. </html> 

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

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

图片精选