< template> < divclass = " container" id = " container" > < divclass = " drag-box center" v-drag  v-if = " isShowDrag" > < div> </ div> </ div> </ div> </ template> < script> 
export  default  { data ( )  { return  { isShowDrag :  true , } ; } , directives :  { drag :  { bind :  function  ( drag_dom )  { drag_dom. onmousedown  =  ( e )  =>  { let  disX =  e. clientX -  drag_dom. offsetLeft; let  disY =  e. clientY -  drag_dom. offsetTop; let  container_dom =  document. getElementById ( "container" ) ; document. onmousemove  =  ( e )  =>  { let  left =  e. clientX -  disX; let  top =  e. clientY -  disY; let  leftMax = container_dom. offsetLeft + ( container_dom. clientWidth -  drag_dom. clientWidth) ; let  leftMin =  container_dom. offsetLeft +  1 ;  if  ( left >  leftMax)  { drag_dom. style. left =  leftMax +  "px" ; }  else  if  ( left <  leftMin)  { drag_dom. style. left =  leftMin +  "px" ; }  else  { drag_dom. style. left =  left +  "px" ; } let  topMax = container_dom. offsetTop + ( container_dom. clientHeight -  drag_dom. clientHeight) ; let  topMin =  container_dom. offsetTop +  1 ;  if  ( top >  topMax)  { drag_dom. style. top =  topMax +  "px" ; }  else  if  ( top <  topMin)  { drag_dom. style. top =  leftMin +  "px" ; }  else  { drag_dom. style. top =  top +  "px" ; } } ; document. onmouseup  =  ( )  =>  { document. onmousemove =  null ; document. onmouseup =  null ; } ; } ; } , } , } , 
} ; 
 </ script> < stylelang = " scss" scoped > 
.drag-box  { position :  absolute; top :  100px; left :  100px; width :  300px; height :  100px; background :  #fff; border-radius :  5px; box-shadow :  0 4px 12px rgba ( 0,  0,  0,  0.15) ; padding :  10px; // 改变鼠标样式为移动图标cursor :  move; // 禁止文字被选中user-select :  none; 
} .container  { border :  1px solid red; width :  600px; height :  300px; margin :  30px; 
} .center  { display :  flex; justify-content :  center; align-items :  center; 
} 
 </ style>