@@ -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