Skip to content

Commit f663b23

Browse files
committed
perf[el-dragDialog]: add the verification of moving edges
1 parent afd255d commit f663b23

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

src/directive/el-dragDialog/drag.js

+29-6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export default{
44
const dragDom = el.querySelector('.el-dialog')
55
dialogHeaderEl.style.cssText += ';cursor:move;'
66
dragDom.style.cssText += ';top:0px;'
7+
78
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
89
function getStyle(dom, attr) {
910
if (dom.currentStyle) {
@@ -18,6 +19,18 @@ export default{
1819
const disX = e.clientX - dialogHeaderEl.offsetLeft
1920
const disY = e.clientY - dialogHeaderEl.offsetTop
2021

22+
const dragDomWidth = dragDom.offsetWidth
23+
const dragDomheight = dragDom.offsetHeight
24+
25+
const screenWidth = document.body.clientWidth
26+
const screenHeight = document.body.clientHeight
27+
28+
const minDragDomLeft = dragDom.offsetLeft
29+
const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth
30+
31+
const minDragDomTop = dragDom.offsetTop
32+
const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight
33+
2134
// 获取到的值带px 正则匹配替换
2235
let styL = getStyle(dragDom, 'left')
2336
let styT = getStyle(dragDom, 'top')
@@ -32,14 +45,24 @@ export default{
3245

3346
document.onmousemove = function(e) {
3447
// 通过事件委托,计算移动的距离
35-
const l = e.clientX - disX
36-
const t = e.clientY - disY
48+
let left = e.clientX - disX
49+
let top = e.clientY - disY
3750

38-
// 移动当前元素
39-
dragDom.style.cssText += `;left:${l + styL}px;top:${t + styT}px;`
51+
// 边界处理
52+
if (-(left) > minDragDomLeft) {
53+
left = -minDragDomLeft
54+
} else if (left > maxDragDomLeft) {
55+
left = maxDragDomLeft
56+
}
4057

41-
// 将此时的位置传出去
42-
// binding.value({x:e.pageX,y:e.pageY})
58+
if (-(top) > minDragDomTop) {
59+
top = -minDragDomTop
60+
} else if (top > maxDragDomTop) {
61+
top = maxDragDomTop
62+
}
63+
64+
// 移动当前元素
65+
dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
4366
}
4467

4568
document.onmouseup = function(e) {

0 commit comments

Comments
 (0)