1.css部分:
- .dialog {
- ? display: none;
- ? position: absolute;
- ? left: 50%;
- ? top: 50%;
- ? transform: translate(-50%, -50%);
- ? background-color: #fff;
- ? border-radius: 5px;
- ? box-shadow: 0 10px 20px rgba(0, 0, 0, .3);
- ? z-index: 9999;
- }
-
- .dialog-header {
- ? background-color: #f6f7f8;
- ? padding: 10px;
- ? border-top-left-radius: 5px;
- ? border-top-right-radius: 5px;
- ? cursor: move;
- }
-
- .dlgtitle {
- ? font-weight: bold;
- ? font-size: 16px;
- }
-
- .close-btn {
- ? float: right;
- ? cursor: pointer;
- }
-
- .dialog-content {
- ? padding: 20px;
- }
2.html部分:
- <button id="openBtn">打开对话框</button>
-
- <div id="dialog" class="dialog">
- ? <div class="dialog-header">
- ? ? <span class="dlgtitle">对话框标题</span>
- ? ? <span class="close-btn">×</span>
- ? </div>
- ? <div class="dialog-content">
- ? ? <p>这里是对话框内容</p>
- ? </div>
- </div>
3.JavaScript部分:
- var dialog = document.getElementById('dialog');
- var openBtn = document.getElementById('openBtn');
- var closeBtn = document.querySelector('.close-btn');
- var isDragging = false;
- var mouseX, mouseY, dialogLeft, dialogTop;
-
- // 鼠标按下时记录鼠标位置以及对话框位置
- dialogHeaderMouseDown = function(e) {
- ? isDragging = true;
- ? mouseX = e.clientX;
- ? mouseY = e.clientY;
- ? dialogLeft = dialog.offsetLeft;
- ? dialogTop = dialog.offsetTop;
- }
-
- // 鼠标移动时移动对话框
- // document.onmousemove = function(e) {
- dialogHeaderMouseMove = function(e) {
- ? if (isDragging) {
- ? ? var moveX = e.clientX - mouseX;
- ? ? var moveY = e.clientY - mouseY;
- ? ? dialog.style.left = dialogLeft + moveX + 'px';
- ? ? dialog.style.top = dialogTop + moveY + 'px';
- ? }
- }
-
- // 鼠标松开时停止拖动
- // document.onmouseup = function() {
- dialogHeaderMouseup = function() {
- ? isDragging = false;
- }
-
- // 点击打开按钮显示对话框
- openBtn.onclick = function() {
- ? dialog.style.display = 'block';
- }
-
- // 点击关闭按钮或对话框外部关闭对话框
- closeBtn.onclick = function() {
- ? dialog.style.display = 'none';
- }
-
- dialog.onclick = function(e) {
- ? if (e.target == dialog) {
- ? ? dialog.style.display = 'none';
- ? }
- }
-
- // 鼠标按下对话框头部,开始拖动对话框
- var header = document.querySelector('.dialog-header');
- header.addEventListener('mousedown', dialogHeaderMouseDown);
- header.addEventListener('mousemove', dialogHeaderMouseMove);
- header.addEventListener('mouseup', dialogHeaderMouseup);
可以使用jb51在线工具:http://tools.jb51.net/code/WebCodeRun 测试上述代码运行效果。
附:完整示例代码:
- <!DOCTYPE html>
- <html lang="zh_CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>可拖拽非模态对话框</title>
- <style>
- .dialog {
- display: none;
- position: absolute;
- left: 50%;
- top: 50%;
- transform: translate(-50%, -50%);
- background-color: #fff;
- border-radius: 5px;
- box-shadow: 0 10px 20px rgba(0, 0, 0, .3);
- z-index: 9999;
- }
-
- .dialog-header {
- background-color: #f6f7f8;
- padding: 10px;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
- cursor: move;
- }
-
- .dlgtitle {
- font-weight: bold;
- font-size: 16px;
- }
-
- .close-btn {
- float: right;
- cursor: pointer;
- }
-
- .dialog-content {
- padding: 20px;
- }
- </style>
- </head>
- <body>
- <button id="openBtn">打开对话框</button>
- <div id="dialog" class="dialog">
- <div class="dialog-header">
- <span class="dlgtitle">对话框标题</span>
- <span class="close-btn">×</span>
- </div>
- <div class="dialog-content">
- <p>这里是对话框内容</p>
- </div>
- </div>
- <script>
- var dialog = document.getElementById('dialog');
- var openBtn = document.getElementById('openBtn');
- var closeBtn = document.querySelector('.close-btn');
- var isDragging = false;
- var mouseX, mouseY, dialogLeft, dialogTop;
-
- // 鼠标按下时记录鼠标位置以及对话框位置
- dialogHeaderMouseDown = function(e) {
- isDragging = true;
- mouseX = e.clientX;
- mouseY = e.clientY;
- dialogLeft = dialog.offsetLeft;
- dialogTop = dialog.offsetTop;
- }
-
- // 鼠标移动时移动对话框
- // document.onmousemove = function(e) {
- dialogHeaderMouseMove = function(e) {
- if (isDragging) {
- var moveX = e.clientX - mouseX;
- var moveY = e.clientY - mouseY;
- dialog.style.left = dialogLeft + moveX + 'px';
- dialog.style.top = dialogTop + moveY + 'px';
- }
- }
-
- // 鼠标松开时停止拖动
- // document.onmouseup = function() {
- dialogHeaderMouseup = function() {
- isDragging = false;
- }
-
- // 点击打开按钮显示对话框
- openBtn.onclick = function() {
- dialog.style.display = 'block';
- }
-
- // 点击关闭按钮或对话框外部关闭对话框
- closeBtn.onclick = function() {
- dialog.style.display = 'none';
- }
-
- dialog.onclick = function(e) {
- if (e.target == dialog) {
- dialog.style.display = 'none';
- }
- }
-
- // 鼠标按下对话框头部,开始拖动对话框
- var header = document.querySelector('.dialog-header');
- header.addEventListener('mousedown', dialogHeaderMouseDown);
- header.addEventListener('mousemove', dialogHeaderMouseMove);
- header.addEventListener('mouseup', dialogHeaderMouseup);
- </script>
- </body>
- </html>
还可以使用jb51在线工具:http://tools.jb51.net/code/HtmlJsRun 测试上述代码运行效果!