当前位置: 首页 > news >正文

uniapp/微信小程序实现加入购物车点击添加飞到购物车动画

1、预期效果 

2、实现思路

每次点击添加按钮时,往该按钮上方添加一个悬浮元素,通过位移动画将元素移到目标位置。

1. 为每个点击元素设置不同的class,才能通过uni.createSelectorQuery来获取每个元素的节点信息;

2. 添加一个与点击元素一模一样的动画元素;

3. 获取点击元素的节点信息将动画元素放置到点击元素上方;

4. 计算动画元素到目标位置的距离,获得xy坐标执行位移动画;

5. 等待每个动画元素执行动画完毕后移除该元素。

3、核心代码

<template><view><!-- 商品列表 --><view v-for="item in goodsList" :key="item.id"><view :class="[`add-cart-${item.id}`]" @click="addToCart(item)">加购</view></view><!-- 动画元素列表 --><viewv-for="item in anims" :key="item.key"style="position: fixed; transition: transform 0.5s linear;":style="{top: `${item.top}px`,left: `${item.left}px`,transform: `translate(${item.x}px, ${item.y}px)`,}">加购</view></view>
</template><script setup lang="ts">
import { ref } from 'vue';
import uniqueId from 'lodash-es/uniqueId';const sys = uni.getSystemInfoSync();
const anims = ref<any[]>([]);
const goodsList = ref([{ id: 1 }, { id: 2 }, { id: 3 }])function addToCart(item) {// 添加动画元素const key = uniqueId();anims.value.push({key,id: item.id,left: 0,top: 0,y: 0,x: 0,});// 获取点击元素的节点信息uni.createSelectorQuery().select(`.add-cart-${item.id}`).boundingClientRect((e: any) => {// 初始化起始位置anims.value.some((citem) => {if (citem.key === key) {citem.top = e.top;citem.left = e.left;return true;}return false;});nextTick(() => {// 设置目标位置anims.value.some((citem) => {if (citem.key === key) {citem.y = sys.windowHeight - citem.top - 50;citem.x = -sys.windowWidth * 0.30;setTimeout(() => { // 等待动画执行完毕移除元素anims.value.splice(anims.value.findIndex((v: any) => v.key === key), 1);}, 500);return true;}return false;});});}).exec();
}</script>

http://www.lryc.cn/news/345500.html

相关文章:

  • 电商大数据的采集||电商大数据关键技术【基于Python】
  • H264 SP帧等知识笔记
  • 流量印钞机:每日稳定收入1500+
  • Tomcat中服务启动失败,如何查看启动失败日志?
  • React19学习-初体验
  • 【UE5】数字人基础
  • OSTEP Projects:KV
  • JAVA学习笔记(第三周)
  • linux 内核驱动 -- reboot -f 导致内核死机 而 reboot则不会引起问题
  • 【vue-echarts】 报错问题解决 “Error: Component series.pie not exists. Load it first.“
  • MySQL慢查询SQL优化
  • 【嵌入式DIY实例】-DDS信号生成器
  • java设计模式四 桥接模式
  • 《Python编程从入门到实践》day24
  • 【hackmyvm】 Animetronic靶机
  • [附源码]石器时代_恐龙宝贝内购版_三网H5手游_带GM工具
  • RS2255XN功能和参数介绍及PDF资料
  • 设计模式——外观模式(Facade)
  • 【linux软件基础知识】Linux 中的普通进程的调度机制
  • keil5软件安装教程(MDKv5.39)
  • 改变视觉创造力:图像合成中基于样式的生成架构的影响和创新
  • 【LAMMPS学习】八、基础知识(5.8)LAMMPS 中热化 Drude 振荡器教程
  • 基于SpringBoot的全国风景区WebGIS按省展示实践
  • 深入理解网络原理3----TCP核心特性介绍(上)【面试高频考点】
  • Java并发编程之锁的艺术:面试与实战指南(三)
  • Final Draft 12 for Mac:高效专业剧本创作软件
  • php字符串变量和常见的字符串函数
  • PPT基础
  • 初识JDBC
  • React 学习-5