@@ -4,6 +4,7 @@ export default{
4
4
const dragDom = el . querySelector ( '.el-dialog' )
5
5
dialogHeaderEl . style . cssText += ';cursor:move;'
6
6
dragDom . style . cssText += ';top:0px;'
7
+
7
8
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
8
9
function getStyle ( dom , attr ) {
9
10
if ( dom . currentStyle ) {
@@ -18,6 +19,18 @@ export default{
18
19
const disX = e . clientX - dialogHeaderEl . offsetLeft
19
20
const disY = e . clientY - dialogHeaderEl . offsetTop
20
21
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
+
21
34
// 获取到的值带px 正则匹配替换
22
35
let styL = getStyle ( dragDom , 'left' )
23
36
let styT = getStyle ( dragDom , 'top' )
@@ -32,14 +45,24 @@ export default{
32
45
33
46
document . onmousemove = function ( e ) {
34
47
// 通过事件委托,计算移动的距离
35
- const l = e . clientX - disX
36
- const t = e . clientY - disY
48
+ let left = e . clientX - disX
49
+ let top = e . clientY - disY
37
50
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
+ }
40
57
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;`
43
66
}
44
67
45
68
document . onmouseup = function ( e ) {
0 commit comments