js实现响应按钮点击弹出可拖拽的非模态对话框完整实例【测试可用】 原创

原创  更新时间:2023年04月23日 18:44:00   原创 投稿:shichen2014  
这篇文章主要介绍了js实现响应按钮点击弹出可拖拽的非模态对话框,结合完整实例形式分析了原生JavaScript实现的可拖拽非模态对话框实现技巧与使用方法,需要的朋友可以参考下

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">&times;</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);

可以使用本站在线工具: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">&times;</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>

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

相关文章

  • 一文详解JavaScript中的按值传递和按引用传递

    一文详解JavaScript中的按值传递和按引用传递

    编程语言中,把一个变量的值赋值给另一个变量,或者给函数调用传递参数有两种方式:按值传递和按引用传递,本文将给大家详细介绍JavaScript中的按值传递和按引用传递,需要的朋友可以参考下
    2024-05-05
  • Javascript表单特效之十大常用原理性样例代码大总结

    Javascript表单特效之十大常用原理性样例代码大总结

    开头说这个常用原理性样例,大家可能不太清楚,这篇文章主要是针对实际开发中常用的一些代码分析,主要是针对表单处理方法的一些资料,推荐大家收藏
    2016-07-07
  • Echarts图表中formatter的基本用法示例

    Echarts图表中formatter的基本用法示例

    formatter 提示框浮层内容格式器,支持字符串模板和回调函数两种形式,下面这篇文章主要给大家介绍了关于Echarts图表中formatter的基本用法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • JS实现的集合去重,交集,并集,差集功能示例

    JS实现的集合去重,交集,并集,差集功能示例

    这篇文章主要介绍了JS实现的集合去重,交集,并集,差集功能,结合实例形式分析了javascript基于数组实现的集合去重、交集、并集、差集等相关实现技巧,需要的朋友可以参考下
    2018-03-03
  • 如何利用JavaScript 实现继承

    如何利用JavaScript 实现继承

    这篇文章主要介绍了如何利用JavaScript 实现继承,JavaScript 在编程语言界是个特殊种类,它和其他编程语言很不一样,JavaScript可以在运行的时候动态地改变某个变量的类型,下面小编将继续介绍JavaScript如何实现继承,需要的朋友可以参考下
    2022-02-02
  • js运动框架_包括图片的淡入淡出效果

    js运动框架_包括图片的淡入淡出效果

    js运动框架_包括图片的淡入淡出效果,需要的朋友可以参考一下
    2013-05-05
  • JS实现的简单下拉框联动功能示例

    JS实现的简单下拉框联动功能示例

    这篇文章主要介绍了JS实现的简单下拉框联动功能,涉及javascript事件响应及页面元素属性动态修改相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Javascript实现网络监测的方法

    Javascript实现网络监测的方法

    这篇文章主要介绍了Javascript实现网络监测的方法,可实现检测网络连接及网速的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • JS弹出对话框返回值代码(asp.net后台)

    JS弹出对话框返回值代码(asp.net后台)

    JS弹出对话框返回值代码,需要的朋友可以参考下。
    2010-12-12
  • 浅谈js中的变量名和函数名重名

    浅谈js中的变量名和函数名重名

    下面小编就为大家带来一篇浅谈js中的变量名和函数名重名。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论