vue 드래그 효과 구현

3227 단어 vue끌다
vue 에서 드래그 효 과 를 실현 합 니 다.참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
우선 클 라 이언 트 Y 페이지 Y screenY layerY offsetY 의 차 이 를 가 려 야 합 니 다.
역할 3(이벤트 대상 에 기 록 된 마우스 위치)
문법 해석
evt.screenX 는 화면의 왼쪽 상단 에 비해 원점 입 니 다.
evt.screenY
vt.clientX 는 브 라 우 저의 클 라 이언 트 왼쪽 상단 에 원점(스크롤 바 위 치 를 계산 하지 않 음)
evt.clientY
vt.pageX 는 브 라 우 저의 클 라 이언 트 왼쪽 상단 을 원점 으로 합 니 다(스크롤 바 의 위 치 를 계산 합 니 다)
evt.pageY
evt.offsetX 는 자신의 왼쪽 상단 을 원점 으로 한다.
evt.offsetY

vt.pagey/evt.pageX 는 문서 의 왼쪽 상단 에 해당 하 는 원점 입 니 다.즉,숨겨 진 거 리 를 포함 합 니 다.
vt.clientY/evt.clientX 는 브 라 우 저 시각 창의 왼쪽 상단 을 원점 으로 합 니 다.즉,숨겨 진 거 리 를 포함 하지 않 습 니 다.
드래그 기능 구현

<style>
 #app{
 position: relative; /*  */
 top: 10px;
 left: 10px;
 width: 200px;
 height: 200px;
 background: #666; /*      */
 }
</style>
<body>
 <div id="app" @mousedown="move"> <!--      -->
 {{positionX}}
 {{positionY}}
 </div>
</body>
//main.js
let app = new Vue({
 el:'#app',
 data:{
 positionX:0,
 positionY:0,
 },
 methods:{
 move(e){
  let odiv = e.target; //      
  
  //           
  let disX = e.clientX - odiv.offsetLeft;
  let disY = e.clientY - odiv.offsetTop;
  document.onmousemove = (e)=>{ //          
  //                 ,       
  let left = e.clientX - disX; 
  let top = e.clientY - disY;
   
  //       positionX positionY  
  this.positionX = top;
  this.positionY = left;
   
  //      
  odiv.style.left = left + 'px';
  odiv.style.top = top + 'px';
  };
  document.onmouseup = (e) => {
  document.onmousemove = null;
  document.onmouseup = null;
  };
 } 
 
 },
 computed:{},
});
물론 사용자 정의 명령 으로 연결 할 수 있 습 니 다.그러면 명령 을 호출 하 는 형식 으로 드래그 효 과 를 실현 할 수 있 습 니 다.다음은 사용자 정의 명령 을 정의 하 는 코드 입 니 다.
main.js 에서 전역 명령 을 정의 합 니 다.

Vue.directive('drag'
 drag: {
  //      
  bind(el) {
  let odiv = el; //      
  oDiv.onmousedown = (e) => {
   //           
   let disX = e.clientX - odiv.offsetLeft;
   let disY = e.clientY - odiv.offsetTop;
   
   document.onmousemove = (e)=>{
   //                 ,       
   let left = e.clientX - disX; 
   let top = e.clientY - disY;
   
   if(left<3) {
    left=0;
    odiv.style.width="2px";
   }else{odiv.style.width="auto";}
   if(left>innerWidth-odiv.offsetWidth) {left=innerWidth- odiv.offsetWidth;odiv.style.width="2px";}
   
   //      
   odiv.style.left = left + 'px';
   odiv.style.top = top + 'px';
   };
   document.onmouseup = (e) => {
   document.onmousemove = null;
   document.onmouseup = null;
   };
   }
 }
});
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기