效果展示:

一:html结构

<div id="buyButton" class="btn-buy">
<button onclick="cartAdd(this,'/',1,'/shopping.html');" class="buy">立即购买</button>
<button onclick="cartAdd(this,'/',0,'/cart.html');" class="add" ref="addToShopCartRef" @click="addToShopCart">加入购物车</button>
</div>
<transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter">
<div class="animateImg" v-if="isShowImg" ref="animateImgRef">
<img width="100%" height="100%" :src="goods.imglist[0].thumb_path" alt="">
</div>
</transition>

二:css样式

<style scoped>
.animateImg {
height: 40px;
width: 40px;
position: absolute;
top: 20px;
left: 20px;
transition: all 1s;
}
</style>

三:js部分

<script>
export default {
data() {
return {
addToShopCartRefOffset: null, //获取加入购物车的偏移量
shopCartOffset: null,
isShowImg: false
};
}, mounted() {
setTimeout(() => {
this.addToShopCartRefOffset = $(this.$refs.addToShopCartRef).offset();
this.shopCartOffset = $("#shopCartId").offset();
}, 200);
}, methods: {
// 加入购物车
addToShopCart() {
this.isShowImg = true;
// 准备好载荷
const goods = {
goodsId: this.$route.params.goodsId,
count: this.goodsCount
};
// 调用Vuex的mutations方法
this.store.commit("addGoods", goods);
},
// 动画相关,进入前的动画
beforeEnter(el) {
// 设置动画的起始位置
el.style.left = `${this.addToShopCartRefOffset.left}px`;
el.style.top = `${this.addToShopCartRefOffset.top}px`;
el.style.transform = "scale(2)"
},
enter(el, done) {
//刷新动画帧
el.offsetWidth;
el.style.transform = "scale(0.5)"; //设置进入阶段结束的位置
el.style.left = `${this.shopCartOffset.left}px`;
el.style.top = `${this.shopCartOffset.top}px`;
// ...
done();
},
afterEnter(el) {
this.isShowImg = false;
}
}
};
</script>

过渡&动画的官方文档:

https://vuejs.bootcss.com/v2/guide/transitions.html

写得不好,但是还是要去吃饭的

vue中做出购物车的功能的更多相关文章

  1. react 实现类似vue中的<keep-alive>的功能,并解决antd-mobile切换回来时的空白

    在移动端的spa页面中,只要使用到了路由就很有必要使用到状态保存的功能,这样才能保证在页面进行切换的时候,让用户可以看到刚才滑动的地方,让用户的体验更加友好.这儿我找到了react-router-ca ...

  2. vue中实现全选功能

    <!DOCTYPE html><html><head><meta charset="utf-8"><title>Vue ...

  3. vue中使用导出表格功能

    1.下载依赖 npm install -S file-saver xlsx npm install -D script-loader 2.在src下创建vendor文件夹,并在文件夹中放两个文件 Bl ...

  4. Vue中结合Flask与Node.JS的异步加载功能实现文章的分页效果

    你好!欢迎阅读我的博文,你可以跳转到我的个人博客网站,会有更好的排版效果和功能. 此外,本篇博文为本人Pushy原创,如需转载请注明出处:http://blog.pushy.site/posts/15 ...

  5. vue中使用cookie记住用户上次选择(本次例子中为下拉框)

    最近工作中碰到一个需求,添加一条数据时,自动记住上次选择的下拉框的数据,刚开始觉得没思路,后来请教了项目组长,组长直接一句,这不很简单吧,直接用cookie,我:....... 好吧,都王的差不多了, ...

  6. 通俗易懂了解Vue中nextTick的内部实现原理

    1. 前言 nextTick 是 Vue 中的一个核心功能,在 Vue 内部实现中也经常用到 nextTick.在介绍 nextTick 实现原理之前,我们有必要先了解一下这个东西到底是什么,为什么要 ...

  7. 在vue中如何实现购物车checkbox的三级联动

    最近用vue写一个电商项目,自然就少不了要写一个购物车的相关页面,功能完整的购物车的checkbox应该是三级联动的,1级checkbox是选中购物车中所有的商品,2级checkbox是选中某个店铺下 ...

  8. 用Vue来实现购物车功能(二)

    这个小demo具有添加商品进购物车 .增加购物车内商品的数量.减少购物车内商品的数量.计算一类商品的总价.以及计算所有商品的总价 首先看目录结构 因为我们的Tab.vue  Car.vue 以及Car ...

  9. vue.js实现购物车功能

    购物车是电商必备的功能,可以让用户一次性购买多个商品,常见的购物车实现方式有如下几种: 1. 用户更新购物车里的商品后,页面自动刷新. 2. 使用局部刷新功能,服务器端返回整个购物车的页面html 3 ...

随机推荐

  1. 思科安全:加密流量威胁检测、加密流量威胁和恶意软件检测、识别无线干扰或威胁、Talos 情报源可加强对已知和新型威胁的防御、分布式安全异常检测

    思科DNA竞品比较工具 您的网络能够驱动数字化转型吗? 根据IDC调查,45%的受调研公司计划在未来两年内做好网络数字化的准备.查看数字化网络带来的结果和商业价值. 下载报告 思科 HPE 华为 Ar ...

  2. python-unittest单元测试框架

    可以理解为是已经帮我们封装好的东东,可以完成执行用例\预期与实际结果的对比等. import unittest 封装好的单元测试框架,可以直接使用 编写的测试类的继承unittest.TestCase ...

  3. swift的arc 是不是有问题?

    class Arctest { let name: String = "Arctest" @lazy var ret:() -> String? = { [weak self ...

  4. C++中的宏和const

    在C语言中使用const来定义一个变量,可以通过变量类型的指针形式来进行修改,而C++中增强了这种表现形式,使得即使通过类型变量指针也不能对变量进行修改. 在C++中const和宏是有区别的. con ...

  5. 洛谷 U6931 灯光

    题目背景 明天就是校园活动了,小明作为场地的负责人,将一切都布置好了.但是在活动的前几天,校园里的灯却都坏掉了,无奈之下,只好再去买一批灯.但是很遗憾的是,厂家看马上要过年了,就没有在进货了,现在只剩 ...

  6. 如何解决outlook2013邮件规则for other machine的失效问题

    如何解决outlook2013邮件规则for other machine的失效问题 问题描述:因为重装系统,outlook2013进去后->Rules and Alerts->发现所有原来 ...

  7. Vmware ESXi 6.5 安装手册

    1          安装前准备 1.1          硬件环境准备 无 备注: 本指导书以虚拟光驱.虚拟软驱为例,如使用物理光驱.物理软驱安装系统操作则以实际系统光盘.软盘代替. 1.2     ...

  8. ssh免密脚本

    #!/bin/sh if [ "$1"x = ""x ]; then echo "usage:/opt/bin/auto-ssh.sh user se ...

  9. 基于zookeeper的MySQL主主负载均衡的简单实现

    1.先上原理图 2.说明 两个mysql采用主主同步的方式进行部署. 在安装mysql的服务器上安装客户端(目前是这么做,以后想在zookeeper扩展集成),客户端实时监控mysql应用的可用性,可 ...

  10. 【转】Pro Android学习笔记(四):了解Android资源(下)

    处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...