经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » jQuery » 查看文章
jQuery实现点击按钮弹出可拖拽模态对话框完整实例【测试可用】[原创]
来源:jb51  时间:2023/4/26 8:49:51  对本文有异议

css部分:

  1. .dialog {
  2. display: none; /* 初始隐藏 */
  3. position: absolute;
  4. width: 300px;
  5. height: 200px;
  6. top: 50px;
  7. left: 50px;
  8. background-color: #fff;
  9. border: 1px solid #ccc;
  10. box-shadow: 0 0 10px rgba(0,0,0,.2);
  11. }
  12. .dialog-header {
  13. height: 30px;
  14. line-height: 30px;
  15. padding: 0 10px;
  16. font-size: 16px;
  17. font-weight: bold;
  18. background-color: #f5f5f5;
  19. border-bottom: 1px solid #ccc;
  20. cursor: move; /* 允许拖拽 */
  21. }
  22. .dialog-body {
  23. padding: 10px;
  24. }
  25.  
  26. /* 遮罩层样式 */
  27. .mask {
  28. display: none; /* 初始隐藏 */
  29. position: fixed;
  30. width: 100%;
  31. height: 100%;
  32. top: 0;
  33. left: 0;
  34. background-color: rgba(0,0,0,.3);
  35. }

html部分:

  1. <!-- 点击按钮弹出对话框的按钮 -->
  2.  
  3. <button class="dialog-trigger">点击弹出对话框</button>
  4.  
  5. <!-- 对话框 -->
  6.  
  7. <div class="dialog" id="dialog">
  8.  
  9. <div class="dialog-header">对话框</div>
  10.  
  11. <div class="dialog-body">这里是对话框内容</div>
  12.  
  13. </div>

js部分:

  1. $(function() {
  2. var $dialog = $('.dialog'); // 对话框
  3. var $mask = $('.mask'); // 遮罩层
  4. var isDragging = false; // 是否拖拽中
  5.  
  6. // 点击弹出对话框
  7. $('.dialog-trigger').click(function() {
  8. $dialog.show(); // 显示对话框
  9. $mask.show(); // 显示遮罩层
  10. });
  11.  
  12. // 拖拽对话框
  13. $dialog.find('.dialog-header').mousedown(function(e) {
  14. isDragging = true; // 开始拖拽
  15. var startX = e.pageX; // 鼠标按下时的X坐标
  16. var startY = e.pageY; // 鼠标按下时的Y坐标
  17. var left = $dialog.offset().left; // 对话框初始的left值
  18. var top = $dialog.offset().top; // 对话框初始的top值
  19.  
  20. // 拖拽事件
  21. $(document).mousemove(function(e) {
  22. if (isDragging) {
  23. var moveX = e.pageX - startX; // 鼠标移动的X距离
  24. var moveY = e.pageY - startY; // 鼠标移动的Y距离
  25. $dialog.css({
  26. left: left + moveX + 'px',
  27. top: top + moveY + 'px'
  28. });
  29. }
  30. });
  31.  
  32. // 停止拖拽事件
  33. $(document).mouseup(function() {
  34. isDragging = false;
  35. });
  36. });
  37.  
  38. // 点击遮罩层或对话框的关闭按钮,隐藏对话框和遮罩层
  39. $mask.click(function() {
  40. $dialog.hide();
  41. $mask.hide();
  42. });
  43. $dialog.find('.dialog-close').click(function() {
  44. $dialog.hide();
  45. $mask.hide();
  46. });
  47. });

完整实例如下:

  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>jQuery点击弹出模态对话框</title>
  6. <style>
  7.  
  8. .dialog {
  9. display: none; /* 初始隐藏 */
  10. position: absolute;
  11. width: 300px;
  12. height: 200px;
  13. top: 50px;
  14. left: 50px;
  15. background-color: #fff;
  16. border: 1px solid #ccc;
  17. box-shadow: 0 0 10px rgba(0,0,0,.2);
  18. }
  19. .dialog-header {
  20. height: 30px;
  21. line-height: 30px;
  22. padding: 0 10px;
  23. font-size: 16px;
  24. font-weight: bold;
  25. background-color: #f5f5f5;
  26. border-bottom: 1px solid #ccc;
  27. cursor: move; /* 允许拖拽 */
  28. }
  29. .dialog-body {
  30. padding: 10px;
  31. }
  32.  
  33. /* 遮罩层样式 */
  34. .mask {
  35. display: none; /* 初始隐藏 */
  36. position: fixed;
  37. width: 100%;
  38. height: 100%;
  39. top: 0;
  40. left: 0;
  41. background-color: rgba(0,0,0,.3);
  42. }
  43.  
  44. </style>
  45.  
  46. </head>
  47.  
  48. <body>
  49.  
  50. <!-- 点击按钮弹出对话框的按钮 -->
  51.  
  52. <button class="dialog-trigger">点击弹出对话框</button>
  53.  
  54. <!-- 对话框 -->
  55.  
  56. <div class="dialog" id="dialog">
  57.  
  58. <div class="dialog-header">对话框</div>
  59.  
  60. <div class="dialog-body">这里是对话框内容</div>
  61.  
  62. </div>
  63.  
  64. <script src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
  65.  
  66. <script>
  67.  
  68. $(function() {
  69. var $dialog = $('.dialog'); // 对话框
  70. var $mask = $('.mask'); // 遮罩层
  71. var isDragging = false; // 是否拖拽中
  72.  
  73. // 点击弹出对话框
  74. $('.dialog-trigger').click(function() {
  75. $dialog.show(); // 显示对话框
  76. $mask.show(); // 显示遮罩层
  77. });
  78.  
  79. // 拖拽对话框
  80. $dialog.find('.dialog-header').mousedown(function(e) {
  81. isDragging = true; // 开始拖拽
  82. var startX = e.pageX; // 鼠标按下时的X坐标
  83. var startY = e.pageY; // 鼠标按下时的Y坐标
  84. var left = $dialog.offset().left; // 对话框初始的left值
  85. var top = $dialog.offset().top; // 对话框初始的top值
  86.  
  87. // 拖拽事件
  88. $(document).mousemove(function(e) {
  89. if (isDragging) {
  90. var moveX = e.pageX - startX; // 鼠标移动的X距离
  91. var moveY = e.pageY - startY; // 鼠标移动的Y距离
  92. $dialog.css({
  93. left: left + moveX + 'px',
  94. top: top + moveY + 'px'
  95. });
  96. }
  97. });
  98.  
  99. // 停止拖拽事件
  100. $(document).mouseup(function() {
  101. isDragging = false;
  102. });
  103. });
  104.  
  105. // 点击遮罩层或对话框的关闭按钮,隐藏对话框和遮罩层
  106. $mask.click(function() {
  107. $dialog.hide();
  108. $mask.hide();
  109. });
  110. $dialog.find('.dialog-close').click(function() {
  111. $dialog.hide();
  112. $mask.hide();
  113. });
  114. });
  115.  
  116. </script>
  117.  
  118. </body>
  119.  
  120. </html>

感兴趣的朋友可以使用jb51在线工具:http://tools.jb51.net/code/HtmlJsRun 测试上述代码运行效果!

PS:该实例中的模态对话框实现,其实是增加上了一层mask的遮罩层,将这层遮罩层去掉,就是非模态对话框!感兴趣的朋友可以自己动手调试一下~

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

本站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号