网友回复
先看效果

具体教程
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%
如何破解绕开seedance2.0真人照片生成视频 限制?
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?
WebMCP是干啥的?


