• 实现单选时的价格,全选时价格
  • 单选效果图

  • 全选效果图

html

<template>
<!-- 淘宝结算购物车 -->
<div class="settlement-bill">
<div class="settlement-group">
<div class="settlement-item" v-for="(item,index) in items" :key="item.id">
<i class="iconfont"
@click="radioCheck(item,index)"
:class=" item.isChecked ? 'icon-yuanyixuan' : 'icon-yuanweixuan'" ></i>
<img :src="item.imgUrl" alt="">
<div class="item-right">
<p>{{item.content}}</p>
<span class="item-money">${{item.money}}</span>
<div class="item-num">
<span @click="reduce(index)">-</span>
<span>{{item.num}}</span>
<span @click="add(index)">+</span>
</div>
</div>
</div>
</div>
<div class="settlement-bottom">
<div class="bottom-left">
<i @click="allCheck" class="iconfont " :class="checked ? 'icon-yuanyixuan' : 'icon-yuanweixuan' "></i>
<p>全选</p>
</div>
<div class="bottom-right">
<p>合计<span class="total-money">{{total}}</span></p>
<div class="bottom-total">结算({{num}})</div>
</div>
<div class="clear"></div>
</div>
</div>
</template>

js

<script>
export default {
data(){
return {
checked: false,
items: [
{
id: 0,
imgUrl: '../../static/timg.jpg',
content: '云南白药牙膏家用去黄去口臭美白口气清新585g牙膏牙刷套装',
money: 99,
num: 1,
},
{
id: 1,
imgUrl: '../../static/maiguo.jpg',
content: '湖南小台芒果带箱10斤小台芒果新鲜水果包邮',
money: 39.9,
num: 1
},
{
id: 2,
imgUrl: '../../static/baixiangguo.jpg',
content: '广西新鲜热带水果百香果西番莲鸡蛋果10斤中果酸爽香甜',
money: 69.8,
num: 1
}
]
}
},
computed: {
total(){
let sum = 0;
this.items.forEach(item=>{
if(item.isChecked == true)sum += (item.money*item.num)
})
return Math.round(sum*100)/100;
},
num() {
let num = 0;
this.items.forEach(item=>{
if(item.isChecked == true)num += item.num
})
return num;
}
},
methods: {
// 减少宝贝
reduce(index) {
if(this.items[index].num === 1) return
this.items[index].num--
},
// 增加宝贝
add(index) {
this.items[index].num++; },
radioCheck(item,index) {
let tmpState = !item.isChecked
//改变单个状态
this.$set(item,'isChecked',tmpState)
//检测选择状态
if(tmpState){
let n = 0;
this.items.forEach(itemu => {
if(itemu.isChecked) n++;
})
if(n == this.items.length)this.checked = true; }else {
this.checked = false;
}
},
allCheck(){
this.checked = !this.checked;
for(let i = 0,len = this.items;i < len.length;i++){
this.$set(this.items[i],'isChecked',this.checked)
}
}
} }
</script>

css

<style lang="less">
* {
padding: 0;
margin: 0;
}
html,body,#app {
height: 100%;
}
.settlement-bill {
width: 100%;
height: 100%;
background:#e9eaeb;
.settlement-group {
padding: 20px;
box-sizing: border-box;
.settlement-item {
position: relative;
width: 100%;
padding: 10px 5px;
margin-bottom: 15px;
box-sizing: border-box;
background: #fff;
.iconfont {
position: absolute;
top: 50%;
left: 10px;
margin-top: -10px;
font-size: 20px;
&.icon-yuanyixuan {
color: orangered;
}
}
img {
display: inline-block;
width: 100px;
height: 100px;
margin-left: 25px;
}
.item-right {
display: inline-block;
vertical-align: top;
width: calc(100% - 130px);
p {
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box; /** 对象作为伸缩盒子模型显示 **/
-webkit-box-orient: vertical; /** 设置或检索伸缩盒对象的子元素的排列方式 **/
-webkit-line-clamp: 2; /** 显示的行数 **/
overflow: hidden; /** 隐藏超出的内容 **/
margin: 0 0 15px 0;
}
.item-money {
display: inline-block;
float: left;
color: orangered;
}
.item-num {
display: inline-block;
float: right;
span {
display: inline-block;
width: 25px;
border: 1px solid #dcdfe6;
text-align: center;
&:nth-child(2){
width: 50px;
}
}
}
}
}
}
.settlement-bottom {
position: fixed;
bottom: 0;
width: 100%;
height: 60px;
line-height: 60px;
padding-left: 30px;
padding-right: 25px;
box-sizing: border-box;
background: #fff;
.bottom-left {
float: left;
display: inline-block;
.iconfont {
font-size: 20px;
&.icon-yuanyixuan {
color: orangered;
}
}
p {
display: inline-block;
}
}
.bottom-right {
display: inline-block;
float: right;
p {
display: inline-block;
.total-money {
color: orangered;
}
}
.bottom-total {
display: inline-block;
min-width: 80px;
height: 50px;
line-height: 50px;
margin-top:5px;
text-align: center;
border-radius: 20px;
background: orangered;
color: #fff;
}
}
.clear {
clear: both;
}
}
} </style>
  • 想写这个小demo好久啦,终于写好。
遇到的vue3.0写法

import { Watch, Component, Vue, Emit, Prop } from "vue-class-decorator";
// 没有组件
@component
// 有组件
// import children from "./components/children.vue";
// @component({ components:{children} }) export class MyChildren extends Vue{
username = ""; // 名字
//userId 父子之间传值,必传默认是null
@Prop({ type: String, required: true, default: null})
userId: string;
@Emit("changeChildren")
changeChildren(){} created(){}
mounted(){}
// 方法
cancel() {
// 调用自定义函数
this.changeChildren()
}
}

vue实现结算淘宝购物车效果的更多相关文章

  1. vue实现淘宝购物车功能

    淘宝购物车功能,效果如下图 非常简单的逻辑,没有做代码的封装,代码如下 <div class="list-container"> <div class=" ...

  2. 仿淘宝购物车demo---增加和减少商品数量

    在上一篇博客中,小编简单的介绍了如何使用listview来实现购物车,但是仅仅是简单的实现了列表的功能,随之而来一个新的问题,买商品的时候,我们可能不止想买一件商品,想买多个,或许有因为某种原因点错了 ...

  3. jQuery实现淘宝购物车小组件

    我爱撸码,撸码使我感到快乐! 大家好,我是Counter,本章将实现淘宝购物车小组件, 用原生js可以实现吗,当然可以,可是就是任性一回,就是想用jQuery 来实现下.HTML代码不多才4行,CSS ...

  4. Vue实现仿淘宝商品详情属性选择的功能

    Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下:   attrA ...

  5. 淘宝购物车页面 智能搜索框Ajax异步加载数据

    如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...

  6. 淘宝购物车页面 PC端和移动端实战

    最近花了半个月的时间,做了一个淘宝购物车页面的Demo.当然,为了能够更加深入的学习,不仅仅有PC端的固定宽度的布局,还实现了移动端在Media Query为768px以下(也就是实现了ipad,ip ...

  7. android ------ RecyclerView 模仿淘宝购物车

    电商项目中常常有购物车这个功能,做个很多项目了,都有不同的界面,选了一个来讲一下. RecyclerView 模仿淘宝购物车功能(删除选择商品,商品计算,选择, 全选反选,商品数量加减等) 看看效果图 ...

  8. web——自己实现一个淘宝购物车页面

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  9. Vue(小案例_vue+axios仿手机app)_购物车(二模拟淘宝购物车页面,点击加减做出相应变化)

    一.前言 在上篇购物车中,如果用户刷新了当前的页面,底部导航中的数据又会恢复为原来的: 1.解决刷新,购物车上数值不变                                         ...

随机推荐

  1. ActiveMQ反序列化漏洞(CVE-2015-5254)复现

      0x00 漏洞前言 Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等.Apache ...

  2. Java考试题之八

    QUESTION 139 Giventhe following directory structure: bigProject |--source | |--Utils.java ||--classe ...

  3. CH暑假欢乐赛 SRM 07 天才麻将少女KPM(DP+treap)

    首先LIS有个$O(n^2)$的DP方法 $f(i,j)$表示前i个数,最后一个数<=j的LIS 如果$a_i!=0$则有 如果$a_i=0$则有 注意因为$f(i-1,j)\leq f(i-1 ...

  4. 关于javaweb中图片的存储问题

    图片上传到服务器,然后把上传路径保存到数据库,然后从数据库读出保存的路径显示到网站页面. 我们一般可以在CMS系统中将图片添加到图片服务器中(这个可以使用ftp来部署),然后图片上传到服务器后,在数据 ...

  5. python---Django中模型类中Meta元对象了解

    Django中模型类中Meta元对象了解 1.使用python manage.py shell 进入编辑命令行模式,可以直接进入项目(为我们配置好了环境) python manage.py shell ...

  6. SPI、I2C、UART、I2S、GPIO、SDIO、CAN

    总线,总线,总要陷进里面.这世界上的信号都一样,但是总线却成千上万,让人头疼. 总的来说,总线有三种:内部总线.系统总线和外部总线.内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连: ...

  7. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  8. [转载]查询json数据结构的8种方式

    http://wangxinghaoaccp.blog.163.com/blog/static/1158102362012111812255980/ 你有没有对“在复杂的JSON数据结构中查找匹配内容 ...

  9. 20155305乔磊2016-2017-2《Java程序设计》第八周学习总结

    20155305乔磊2016-2017-2<Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口, ...

  10. CodeForces - 1040B Shashlik Cooking

    Long story short, shashlik is Miroslav's favorite food. Shashlik is prepared on several skewers simu ...