h5 js拖动div

刚好闲了一下,于是就写了一个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,这样就不用去做其他太多计算。

posted @ 2019-12-17 10:54  超哥20  阅读(840)  评论(0编辑  收藏  举报