目录
一、需求描述
二、实现效果
三、完整代码
四、实现过程
1、HTML 页面结构
2、CSS 元素样式
3、JavaScript动态控制
(1)获取元素
(2)显示\隐藏遮罩层与模态框
(3)实现模态框拖动效果
实现一个可以拖拽的模态框;
1、点击按钮显示遮罩层和模态框
2、在模态框标题栏按下并移动鼠标,模态框跟随移动
3、点击关闭按钮或者遮罩层隐藏模态框
【test.html】
可拖拽的模态框 一个可以拖拽的模态框 内容区域不能拖到
一个可以拖拽的模态框 内容区域不能拖到
(1)按钮样式
根据自己的喜好自行添加按钮的样式即可;
.open-btn { display: inline-block; margin: 60px; padding: 10px 20px; font-size: 16px; color: #fff; background-color: #409eff; border: none; border-radius: 8px; }
(2)遮罩层样式
.mask { /* display: none; */ position: fixed; top: 0px; left: 0px; width: 100vw; height: 100vh; background: rgba(0, 0, 0, .3); }
(3)模态框样式
.modal-box { /* display: none; */ position: fixed; top: 120px; left: 60px; width: 400px; min-height: 200px; padding: 10px; background: #fff; border-radius: 8px; box-shadow: 0 0 4px 1px #acacac; z-index: 99999; } .modal-title { text-align: center; font-size: 18px; font-weight: 700; padding: 20px; border-bottom: 1px solid #ddd; cursor: move; } .modal-body { margin: 20px 0; } .close-btn { position: absolute; top: 6px; right: 6px; width: 18px; height: 18px; background-image: url("D:\\test\\close.svg"); background-size: cover; }
将页面中需要操作的元素都进行获取;
这里使用的是querySelector()方法来获取元素,是JavaScript中获取dom元素的方式之一;
在控制遮罩层和模态框的显示与隐藏之前,需要先将其display属性设为none;
.mask { display: none; ...... } .modal-box { display: none; ...... }
根据案例需求,可以知道:
根据案例需求,分析可知:
注册 mousedown 事件,鼠标按下,得到鼠标在模态框内的坐标,即起始位置;
注册 mousemove 事件,鼠标移动,获得最新的鼠标位置,计算移动距离;
注册 mouseup 事件,鼠标弹起,停止拖拽,解除鼠标移动事件;
注意:
=========================================================================
每天进步一点点~!
记录下前端这个一个小知识~~!