Vue开发h5中的按钮拖拽+点击事件

<div class="floatBtn" @touchstart.prevent="move">常购</div>
// 悬浮按钮的拖拽事件,合并单击事件行为至此
        move(e){
            let  startTime = (new Date()).getTime();//获取当前按下时的时间
            let odiv = e.target;//获取目标元素
            const maxLeft = window.outerWidth - 40 //left最大值,40是目标元素的宽
            const maxTop = window.outerHeight - 40 //top最大值,40是目标元素的高
            let t = e.targetTouches[0]
            let x = t.clientX - t.target.offsetLeft //触碰点当前距离事件源的左距
            let y = t.clientY - t.target.offsetTop //触碰点当前距离事件源的上距
            document.ontouchmove = (e)=>{//鼠标按下并移动的事件
                //用鼠标的位置减去鼠标相对元素的位置(默认20),得到元素的位置
                const touch =  e.changedTouches[0]
                let left =  touch.clientX - x
                let top =  touch.clientY - y
                // 设置移动范围
                if(left <= 0) left = 0
                if(left >= maxLeft) left = maxLeft 
                if(top <= 46) top = 46 //最小为头部底边
                if(top >= maxTop) top = maxTop
                //移动当前元素(改变定位)
                odiv.style.left = left + 'px';
                odiv.style.top = top + 'px';
            };
            document.ontouchend = () => {
                document.ontouchmove = null;
                e.preventDefault()
                var nowTime = (new Date()).getTime();//松开时的时间
                // 小于300ms可以识别为点击事件的范围,最好设置为50
                if(nowTime - startTime < 50) this.$router.push('/favorites')
            }
        }

在编写功能的过程中,发现如果设置了touchstart.prevent,则设置的click就会被阻止触发,所以将点击事件执行体写在了拖拽事件的最后阶段。
该解决方法参考:https://oss.so/article/65

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值