网友回复
先看效果

具体教程
1、在component文件夹下新增一个组件叫cartfly.vue
<template>
<view class="relative">
<view class="ball" v-for="(d,i) in balls" :key="i" :style=" d.inited ? 'transition: transform .5s ease-in; transform: translate3d(0, ' + offsetY + 'px,0); top: ' + ballY + 'px;' : '' ">
<view class="inner arbg" :style="d.inited ? 'transition: transform .5s linear; transform: translate3d( ' + offsetX + 'px,0,0); left: ' + ballX + 'px; opacity: 1;' : '' "></view>
</view>
</view>
</template>
<script>
export default {
props:{
cartBasketRect:Object,// 购物车篮的rect信息
},
data() {
return {
offsetX: 0,
offsetY: 0,
ballX: 0,
ballY: 0,
balls: {},
//避免抖动
lastEvent:'',
lastId:''
}
},
created() {
let balls = [];
for (let i = 0; i < 5; i++) {
balls.push({ inited: false });
}
this.balls = balls
},
methods:{
getBalls() {
return balls;
},
addToCart (e,id) {
if(!id){
this.lastId = ''
return
}
const self = this
if(this.lastId == id){
e = this.lastEvent
}else{
this.lastId = id
this.lastEvent = e
}
let ballX = e.touches[0].clientX - 10
let ballY = e.touches[0].clientY - 9;
this.offsetX = -Math.abs(this.cartBasketRect.left - ballX + 10)
this.offsetY = Math.abs(this.cartBasketRect.top - ballY +(this.cartBasketRect.height/1.5))
this.ballX = ballX
this.ballY = ballY
for (let i = 0; i < 5; i++) {
if (!this.balls[i].inited) {
this.balls[i].inited = true
setTimeout(() => {
self.balls[i].inited= false
}, 500);
break;
}
}
}
}
}
</script...点击查看剩余70%


