< ! DOCTYPE  html>   
< html>   
< head>   < style>   #mydiv {   width :  200px;   height :  200px;   background- color:  red;   position :  absolute;   cursor :  move;   }   < / style>   | 
< / head>   
< body>   < div id= "mydiv" > 拖拽我< / div>   < script>   var  mydiv =  document. getElementById ( 'mydiv' ) ;   var  x =  0 ,  y =  0 ;   var  limitX =  window. innerWidth -  200 ;  var  limitY =  window. innerHeight -  200 ;  mydiv. onmousedown  =  function ( e )  {   x =  e. clientX -  mydiv. getBoundingClientRect ( ) . left;   y =  e. clientY -  mydiv. getBoundingClientRect ( ) . top;   document. onmousemove  =  function ( e )  {   var  newX =  e. clientX -  x;   var  newY =  e. clientY -  y;   if  ( newX <  0 )  newX =  0 ;  if  ( newY <  0 )  newY =  0 ;  if  ( newX >  limitX)  newX =  limitX;  if  ( newY >  limitY)  newY =  limitY;  mydiv. style. left =  newX +  'px' ;   mydiv. style. top =  newY +  'px' ;   } ;   document. onmouseup  =  function ( )  {   document. onmousemove =  null ;  } ;   } ;   < / script>   
< / body>   
< / html> 
  
< template> < div class = "drag-box" > < div id= "dragContent" > < div class = "drag-home" > < div class = "drag-title"  v- show= "titleVisible" > 软< br> 键< br> 盘< / div> < div class = "drag-switch" > < div class = "message" > < div class = "name" > 液压支架< / div> < div class = "info" > 当前操作: 前立柱升< / div> < div class = "info" > 当前操作: 前立柱升< / div> < / div> < div class = "drag-button" > < div class = "menu" > < el- button type= "primary"  round> 采煤机< / el- button> < el- button type= "success"  round> 液压知己< / el- button> < el- button type= "info"  round> 总控开关< / el- button> < / div> < div class = "stats" > < el- button type= "success"  round v- for = "(item, index) in 9"  : key= "index"  style= "width: 8rem;" > 按钮{ {  item } } < / el- button> < i v- for = "item in 9"  : key= "item" > < / i> < / div> < div class = "submit" > < el- button type= "primary"  round> 启动< / el- button> < el- button type= "success"  round> 停止< / el- button> < / div> < / div> < / div> < / div> < / div> < / div> 
< / template> < script> 
import  {  reactive,  toRefs,  onBeforeMount,  onMounted,  getCurrentInstance }  from  'vue' export  default  { components :  { } , setup ( )  { const  state =  reactive ( { rightDistance :  '' , leftWidth :  '' , maxWidth :  '' , titleVisible :  false } ) onBeforeMount ( ( )  =>  { } ) onMounted ( ( )  =>  { var  dragContent =  document. getElementById ( 'dragContent' ) ; var  x =  0 ,  y =  0 ; var  limitX =  window. innerWidth -  400 ;  state. maxWidth =  limitXvar  limitY =  window. innerHeight -  600 ;  var  box =  document. getElementById ( "dragContent" ) box. addEventListener ( 'mouseover' ,  ( )  =>  { if  ( state. drightDistance ==  0 )  { box. style. left =  ` ${ state. maxWidth /  10 } rem `  box. style. transitionDuration =   '1s' setTimeout ( ( )  =>  { state. titleVisible =  false } ,  300 ) }  else  { box. style. transitionDuration =   '0s' } } ) box. addEventListener ( 'mouseout' ,  ( )  =>  { if  ( state. drightDistance ==  0 )  { box. style. left =  ` ${ state. maxWidth /  10  +  40 } rem `  box. style. transitionDuration =   '1s' setTimeout ( ( )  =>  { state. titleVisible =  true } ,  300 ) }  else  { box. style. transitionDuration =   '0s' } } ) ; dragContent. onmousedown  =  ( e )  =>  { x =  e. clientX -  dragContent. getBoundingClientRect ( ) . left; y =  e. clientY -  dragContent. getBoundingClientRect ( ) . top; document. onmousemove  =  function  ( e )  { var  newX =  e. clientX -  x; var  newY =  e. clientY -  y; if  ( newX <  0 )  newX =  0 ;  if  ( newY <  0 )  newY =  0 ;  if  ( newX >  limitX)  newX =  limitX;  if  ( newY >  limitY)  newY =  limitY;  dragContent. style. left =  newX +  'px' ; dragContent. style. top =  newY +  'px' ; state. leftWidth =  newXstate. drightDistance =  limitX -  newX} ; document. onmouseup  =  ( )  =>  { document. onmousemove =  null ;  console. log ( '当前坐标点' ,  state. drightDistance) if  ( state. drightDistance ==  0 )  { } } } } ) return  { ... toRefs ( state) , } } 
} 
< / script> 
< style lang= "scss"  scoped> 
. drag- box { width :  100 % ; height :  100vh; overflow :  hidden; position :  absolute; 
} #dragContent { width :  400px; height :  600px; position :  absolute; right :  8rem; top :  50 % ; cursor :  move; . drag- home { height :  100 % ; position :  relative; background- color:  #091659 ; border- radius:  3rem; . drag- title { position :  absolute; left :  - 4rem; top :  calc ( 50 %  -  8rem) ; font- size:  2rem; width :  4rem; height :  16rem; background :  #0b133d; display :  flex; align- items:  center; justify- content:  center; border- radius:  1rem 0  0  1rem} . drag- switch  { height :  100 % ; position :  relative; . message { text- align:  left; padding :  2rem; . name { font- size:  2 . 5rem; margin :  0 . 5rem 0 ; } . info { font- size:  1 . 4rem; margin :  0 . 3rem 0 ; } } . drag- button { height :  80 % ; background :  #22387b; position :  absolute; bottom :  0 ; width :  90 % ; left :  5 % ; border- radius:  2rem; . menu { margin :  1rem 0 ; height :  10 % ; } . stats { height :  75 % ; justify- content:  space- around; align- content:  start; display :  flex; flex- wrap:  wrap; . el- button { margin :  1rem 0 ; } . el- button+ . el- button { margin- left:  unset; } i { margin :  1rem 0 ; width :  8rem; } } . submit { height :  15 % ; } } } } 
} 
< / style>