经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
JS实现简单拖动模态框案例
来源:jb51  时间:2022/7/4 12:09:32  对本文有异议

本文实例为大家分享了JS实现简单拖动模态框的具体代码,供大家参考,具体内容如下

需要实现的效果:

①点击“点击,弹出登录框”后模态框和遮挡层就会显示出来

②点击关闭按钮,模态框和遮盖层就会隐藏起来

③页面拖拽

功能分析:

首先给上面的"点击,弹出登录框"设置点击事件,点击之后就显示遮罩层和模态框,然后给模态框上面的关闭按钮设置点击事件,点击之后就隐藏遮罩层和模态框。然后是拖拽过程,这个过程的实现较为复杂,主要分为下面几步:

1.明确模态框的真正位置是鼠标的坐标减去鼠标在模态框内的坐标。

2.鼠标的坐标通过鼠标按下事件获取,通过e.pageY和e.pageX来获取。

3.按下之后想要获得鼠标在模态框中的坐标(一直都不会变),需要获得盒子的坐标,盒子坐标通过element.offsetTop和element.offsetLeft来获取,通过鼠标的坐标减去模态框的坐标获得鼠标在模态框中的坐标。

4.按下之后鼠标移动,就让模态框的坐标设置称为鼠标的坐标减去鼠标在模态框中的坐标。

5.鼠标松开之后需要停止拖拽,就是移除鼠标移动事件。

完整代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. ?
  4. <head>
  5. ? ? <meta charset="UTF-8">
  6. ? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. ? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. ? ? <title>拖动模态框</title>
  9. ? ? <script>
  10. ? ? ? ? window.onload = function() {
  11. ? ? ? ? ? ? var loginbox = document.querySelector('.loginbox');
  12. ? ? ? ? ? ? var gray = document.querySelector('.gray');
  13. ? ? ? ? ? ? var loginheader = document.querySelector('.login-header');
  14. ? ? ? ? ? ? var close = document.querySelector('.close');
  15. ? ? ? ? ? ? var move = document.querySelector('.move');
  16. ? ? ? ? ? ? loginheader.addEventListener('click', function() {
  17. ? ? ? ? ? ? ? ? loginbox.style.display = 'block';
  18. ? ? ? ? ? ? ? ? gray.style.display = 'block';
  19. ? ? ? ? ? ? });
  20. ? ? ? ? ? ? close.addEventListener('click', function() {
  21. ? ? ? ? ? ? ? ? loginbox.style.display = 'none';
  22. ? ? ? ? ? ? ? ? gray.style.display = 'none';
  23. ? ? ? ? ? ? });
  24. ? ? ? ? ? ? move.addEventListener('mousedown', function(e) {
  25. ? ? ? ? ? ? ? ? // 鼠标在盒子内得距离
  26. ? ? ? ? ? ? ? ? var x = e.pageX - loginbox.offsetLeft;
  27. ? ? ? ? ? ? ? ? var y = e.pageY - loginbox.offsetTop;
  28. ? ? ? ? ? ? ? ? // alert('hahah')
  29. ? ? ? ? ? ? ? ? document.addEventListener('mousemove', move)
  30. ?
  31. ? ? ? ? ? ? ? ? function move(e) {
  32. ? ? ? ? ? ? ? ? ? ? loginbox.style.left = e.pageX - x + 'px';
  33. ? ? ? ? ? ? ? ? ? ? loginbox.style.top = e.pageY - y + 'px';
  34. ?
  35. ? ? ? ? ? ? ? ? }
  36. ? ? ? ? ? ? ? ? // 鼠标谈起就移除鼠标移动事件
  37. ? ? ? ? ? ? ? ? document.addEventListener('mouseup', function() {
  38. ? ? ? ? ? ? ? ? ? ? document.removeEventListener('mousemove', move)
  39. ? ? ? ? ? ? ? ? })
  40. ?
  41. ? ? ? ? ? ? })
  42. ? ? ? ? }
  43. ? ? </script>
  44. ? ? <style>
  45. ? ? ? ? .login-header {
  46. ? ? ? ? ? ? width: 100%;
  47. ? ? ? ? ? ? text-align: center;
  48. ? ? ? ? ? ? height: 30px;
  49. ? ? ? ? ? ? font-size: 24px;
  50. ? ? ? ? ? ? line-height: 30px;
  51. ? ? ? ? }
  52. ? ? ? ??
  53. ? ? ? ? .move {
  54. ? ? ? ? ? ? cursor: move;
  55. ? ? ? ? }
  56. ? ? ? ??
  57. ? ? ? ? ul,
  58. ? ? ? ? li,
  59. ? ? ? ? ol,
  60. ? ? ? ? dl,
  61. ? ? ? ? dt,
  62. ? ? ? ? dd,
  63. ? ? ? ? div,
  64. ? ? ? ? p,
  65. ? ? ? ? span,
  66. ? ? ? ? h1,
  67. ? ? ? ? h2,
  68. ? ? ? ? h3,
  69. ? ? ? ? h4,
  70. ? ? ? ? h5,
  71. ? ? ? ? h6,
  72. ? ? ? ? a {
  73. ? ? ? ? ? ? padding: 0px;
  74. ? ? ? ? ? ? margin: 0px;
  75. ? ? ? ? }
  76. ? ? ? ??
  77. ? ? ? ? a {
  78. ? ? ? ? ? ? text-decoration: none;
  79. ? ? ? ? ? ? color: #000000;
  80. ? ? ? ? }
  81. ? ? ? ??
  82. ? ? ? ? .loginbox {
  83. ? ? ? ? ? ? display: none;
  84. ? ? ? ? ? ? position: absolute;
  85. ? ? ? ? ? ? top: 200px;
  86. ? ? ? ? ? ? left: 50%;
  87. ? ? ? ? ? ? transform: translateX(-50%);
  88. ? ? ? ? ? ? z-index: 2;
  89. ? ? ? ? ? ? width: 520px;
  90. ? ? ? ? ? ? height: 300px;
  91. ? ? ? ? ? ? background-color: #fff;
  92. ? ? ? ? }
  93. ? ? ? ??
  94. ? ? ? ? .loginbox .close {
  95. ? ? ? ? ? ? cursor: pointer;
  96. ? ? ? ? }
  97. ? ? ? ??
  98. ? ? ? ? .loginbox p {
  99. ? ? ? ? ? ? float: left;
  100. ? ? ? ? ? ? font-size: 22px;
  101. ? ? ? ? ? ? text-align: center;
  102. ? ? ? ? ? ? margin-top: 30px;
  103. ? ? ? ? ? ? margin-left: 240px;
  104. ? ? ? ? }
  105. ? ? ? ??
  106. ? ? ? ? .loginbox .content {
  107. ? ? ? ? ? ? float: right;
  108. ? ? ? ? ? ? margin-top: 30px;
  109. ? ? ? ? ? ? margin-right: 70px;
  110. ? ? ? ? }
  111. ? ? ? ??
  112. ? ? ? ? .loginbox .content input {
  113. ? ? ? ? ? ? width: 300px;
  114. ? ? ? ? ? ? height: 25px;
  115. ? ? ? ? ? ? outline: none;
  116. ? ? ? ? ? ? border: 1px solid #ccc;
  117. ? ? ? ? }
  118. ? ? ? ??
  119. ? ? ? ? .loginbox .btn {
  120. ? ? ? ? ? ? background-color: #fff;
  121. ? ? ? ? ? ? width: 180px;
  122. ? ? ? ? ? ? height: 30px;
  123. ? ? ? ? ? ? border: 1px solid #ccc;
  124. ? ? ? ? ? ? margin-top: 40px;
  125. ? ? ? ? ? ? margin-left: 170px;
  126. ? ? ? ? }
  127. ? ? ? ??
  128. ? ? ? ? .loginbox span {
  129. ? ? ? ? ? ? position: absolute;
  130. ? ? ? ? ? ? font-size: 12px;
  131. ? ? ? ? ? ? text-align: center;
  132. ? ? ? ? ? ? line-height: 50px;
  133. ? ? ? ? ? ? z-index: 9999;
  134. ? ? ? ? ? ? top: -25px;
  135. ? ? ? ? ? ? right: -25px;
  136. ? ? ? ? ? ? width: 50px;
  137. ? ? ? ? ? ? height: 50px;
  138. ? ? ? ? ? ? background-color: #fff;
  139. ? ? ? ? ? ? color: #000000;
  140. ? ? ? ? ? ? border-radius: 50%;
  141. ? ? ? ? ? ? box-shadow: 1px 1px 5px rgba(0, 0, 0, .3);
  142. ? ? ? ? }
  143. ? ? ? ??
  144. ? ? ? ? .gray {
  145. ? ? ? ? ? ? display: none;
  146. ? ? ? ? ? ? position: fixed;
  147. ? ? ? ? ? ? top: 0;
  148. ? ? ? ? ? ? left: 0;
  149. ? ? ? ? ? ? width: 100%;
  150. ? ? ? ? ? ? height: 100%;
  151. ? ? ? ? ? ? background-color: rgba(0, 0, 0, .3);
  152. ? ? ? ? }
  153. ? ? </style>
  154. </head>
  155. ?
  156. <body>
  157. ? ? <div class="login-header"><a id="link" href="javascript:;" >点击,弹出登录框</a></div>
  158. ? ? <div class="loginbox">
  159. ? ? ? ? <p class="move">登录会员</p>
  160. ? ? ? ? <div class="content">
  161. ? ? ? ? ? ? <label for="">用户名:</label>
  162. ? ? ? ? ? ? <input type="text" placeholder="请输入用户名">
  163. ? ? ? ? </div>
  164. ? ? ? ? <div class="content">
  165. ? ? ? ? ? ? <label for="">登录密码:</label>
  166. ? ? ? ? ? ? <input type="password" placeholder="请输入用户名">
  167. ? ? ? ? </div>
  168. ? ? ? ? <input type="button" value="登录会员" class="btn">
  169. ? ? ? ? <span class="close">关闭</span>
  170. ? ? </div>
  171. ? ? <div class="gray">
  172. ?
  173. ? ? </div>
  174. </body>
  175. ?
  176. </html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号