js怎么实现响应按钮点击弹出可拖拽的非模态对话框

前端开发   发布日期:2025年04月24日   浏览次数:231

今天小编给大家分享一下js怎么实现响应按钮点击弹出可拖拽的非模态对话框的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.css部分:

  1. .dialog {
  2. display: none;
  3. position: absolute;
  4. left: 50%;
  5. top: 50%;
  6. transform: translate(-50%, -50%);
  7. background-color: #fff;
  8. border-radius: 5px;
  9. box-shadow: 0 10px 20px rgba(0, 0, 0, .3);
  10. z-index: 9999;
  11. }
  12. .dialog-header {
  13. background-color: #f6f7f8;
  14. padding: 10px;
  15. border-top-left-radius: 5px;
  16. border-top-right-radius: 5px;
  17. cursor: move;
  18. }
  19. .dlgtitle {
  20. font-weight: bold;
  21. font-size: 16px;
  22. }
  23. .close-btn {
  24. float: right;
  25. cursor: pointer;
  26. }
  27. .dialog-content {
  28. padding: 20px;
  29. }

2.html部分:

  1. <button id="openBtn">打开对话框</button>
  2. <div id="dialog" class="dialog">
  3. <div class="dialog-header">
  4. <span class="dlgtitle">对话框标题</span>
  5. <span class="close-btn">&times;</span>
  6. </div>
  7. <div class="dialog-content">
  8. <p>这里是对话框内容</p>
  9. </div>
  10. </div>

3.JavaScript部分:

  1. var dialog = document.getElementById('dialog');
  2. var openBtn = document.getElementById('openBtn');
  3. var closeBtn = document.querySelector('.close-btn');
  4. var isDragging = false;
  5. var mouseX, mouseY, dialogLeft, dialogTop;
  6. // 鼠标按下时记录鼠标位置以及对话框位置
  7. dialogHeaderMouseDown = function(e) {
  8. isDragging = true;
  9. mouseX = e.clientX;
  10. mouseY = e.clientY;
  11. dialogLeft = dialog.offsetLeft;
  12. dialogTop = dialog.offsetTop;
  13. }
  14. // 鼠标移动时移动对话框
  15. // document.onmousemove = function(e) {
  16. dialogHeaderMouseMove = function(e) {
  17. if (isDragging) {
  18. var moveX = e.clientX - mouseX;
  19. var moveY = e.clientY - mouseY;
  20. dialog.style.left = dialogLeft + moveX + 'px';
  21. dialog.style.top = dialogTop + moveY + 'px';
  22. }
  23. }
  24. // 鼠标松开时停止拖动
  25. // document.onmouseup = function() {
  26. dialogHeaderMouseup = function() {
  27. isDragging = false;
  28. }
  29. // 点击打开按钮显示对话框
  30. openBtn.onclick = function() {
  31. dialog.style.display = 'block';
  32. }
  33. // 点击关闭按钮或对话框外部关闭对话框
  34. closeBtn.onclick = function() {
  35. dialog.style.display = 'none';
  36. }
  37. dialog.onclick = function(e) {
  38. if (e.target == dialog) {
  39. dialog.style.display = 'none';
  40. }
  41. }
  42. // 鼠标按下对话框头部,开始拖动对话框
  43. var header = document.querySelector('.dialog-header');
  44. header.addEventListener('mousedown', dialogHeaderMouseDown);
  45. header.addEventListener('mousemove', dialogHeaderMouseMove);
  46. header.addEventListener('mouseup', dialogHeaderMouseup);

可以使用本站在线工具:http://tools.jb51.net/code/WebCodeRun 测试上述代码运行效果。

附:完整示例代码:

  1. <!DOCTYPE html>
  2. <html lang="zh_CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>可拖拽非模态对话框</title>
  7. <style>
  8. .dialog {
  9. display: none;
  10. position: absolute;
  11. left: 50%;
  12. top: 50%;
  13. transform: translate(-50%, -50%);
  14. background-color: #fff;
  15. border-radius: 5px;
  16. box-shadow: 0 10px 20px rgba(0, 0, 0, .3);
  17. z-index: 9999;
  18. }
  19. .dialog-header {
  20. background-color: #f6f7f8;
  21. padding: 10px;
  22. border-top-left-radius: 5px;
  23. border-top-right-radius: 5px;
  24. cursor: move;
  25. }
  26. .dlgtitle {
  27. font-weight: bold;
  28. font-size: 16px;
  29. }
  30. .close-btn {
  31. float: right;
  32. cursor: pointer;
  33. }
  34. .dialog-content {
  35. padding: 20px;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <button id="openBtn">打开对话框</button>
  41. <div id="dialog" class="dialog">
  42. <div class="dialog-header">
  43. <span class="dlgtitle">对话框标题</span>
  44. <span class="close-btn">&times;</span>
  45. </div>
  46. <div class="dialog-content">
  47. <p>这里是对话框内容</p>
  48. </div>
  49. </div>
  50. <script>
  51. var dialog = document.getElementById('dialog');
  52. var openBtn = document.getElementById('openBtn');
  53. var closeBtn = document.querySelector('.close-btn');
  54. var isDragging = false;
  55. var mouseX, mouseY, dialogLeft, dialogTop;
  56. // 鼠标按下时记录鼠标位置以及对话框位置
  57. dialogHeaderMouseDown = function(e) {
  58. isDragging = true;
  59. mouseX = e.clientX;
  60. mouseY = e.clientY;
  61. dialogLeft = dialog.offsetLeft;
  62. dialogTop = dialog.offsetTop;
  63. }
  64. // 鼠标移动时移动对话框
  65. // document.onmousemove = function(e) {
  66. dialogHeaderMouseMove = function(e) {
  67. if (isDragging) {
  68. var moveX = e.clientX - mouseX;
  69. var moveY = e.clientY - mouseY;
  70. dialog.style.left = dialogLeft + moveX + 'px';
  71. dialog.style.top = dialogTop + moveY + 'px';
  72. }
  73. }
  74. // 鼠标松开时停止拖动
  75. // document.onmouseup = function() {
  76. dialogHeaderMouseup = function() {
  77. isDragging = false;
  78. }
  79. // 点击打开按钮显示对话框
  80. openBtn.onclick = function() {
  81. dialog.style.display = 'block';
  82. }
  83. // 点击关闭按钮或对话框外部关闭对话框
  84. closeBtn.onclick = function() {
  85. dialog.style.display = 'none';
  86. }
  87. dialog.onclick = function(e) {
  88. if (e.target == dialog) {
  89. dialog.style.display = 'none';
  90. }
  91. }
  92. // 鼠标按下对话框头部,开始拖动对话框
  93. var header = document.querySelector('.dialog-header');
  94. header.addEventListener('mousedown', dialogHeaderMouseDown);
  95. header.addEventListener('mousemove', dialogHeaderMouseMove);
  96. header.addEventListener('mouseup', dialogHeaderMouseup);
  97. </script>
  98. </body>
  99. </html>

以上就是js怎么实现响应按钮点击弹出可拖拽的非模态对话框的详细内容,更多关于js怎么实现响应按钮点击弹出可拖拽的非模态对话框的资料请关注九品源码其它相关文章!