刚好闲了一下,于是就写了一个js拖动div的简单例子,项目是vue搭建的大概就是以下内容
html部分
<div class="shop-cart-icon" id="shopCart" @touchstart="touchStart($event)" @touchmove="touchMove($event)" @touchend="touchEnd($event)"></div>
js部分
data(){ return{ x:0, y:0, cart:null, startX:0, startY:0, } }, mounted(){ this.cart=document.getElementById('shopCart'); }, methods:{ touchStart(e){ e.preventDefault(); this.startX=e.changedTouches[0].clientX; this.startY=e.changedTouches[0].clientY; }, touchMove(e){ this.x=e.changedTouches[0].clientX; this.y=e.changedTouches[0].clientY; let l=this.startX-this.x; let t=this.startY-this.y; this.cart.style.transform=`translate3d(${-l}px,${-t}px,0)`; }, touchEnd(e){ let x=e.changedTouches[0].clientX; let y=e.changedTouches[0].clientY; //goShopCart if(this.startX===x&&this.startY===y){ this.goShopCart(); }else{ this.startX=e.changedTouches[0].clientX; this.startY=e.changedTouches[0].clientY; this.cart.style.right=0; this.cart.style.bottom=0; this.cart.style.transform='translate3d(0,0,0)'; this.cart.style.left=this.startX-20+'px'; this.cart.style.top=this.startY-20+'px'; } }, }
因为本身元素定位时用了right和bottom,所以在手指离开的时候就直接给他归零掉,用做left和top,这样就不用去做其他太多计算。