vue实现商品加减计算总价的实例代码

需求是商品只能选一次,有原价和现价.

大概的效果图是这样:

完整代码在这里,直接复制就能用:

<!DOCTYPE html>

<html lang="zh">

<head>

<meta charset="UTF-8">

<title>Document</title>

<style type="text/css">

html{

background: rgb(214,175,209);

}

/*计算器*/

#app{

text-align: center;

margin-top: 8%;

position: relative;

}

.goods_box{

width: 70vw;

margin-left:15vw;

height: auto;

margin-top: 5%;

}

.goods_box ul{

width: 100%;

overflow:auto;

}

.goods_box ul li{

float: left;

width: 23%;

height: auto;

cursor: pointer;

margin: 2% 1%;

font-size: 0.6rem;

background: #fff;

display: flex;

align-items: center;

align-content: center;

padding-bottom: 1%;

border-radius: 4px;

}

.goods_img{

width: 40%;

border-radius: 6px;

height: auto;

margin-left: -4%;

margin-top: -4%;

box-shadow: 3px 3px 2px rgba(0,0,0,.24);

}

.price{

margin-left: 6%;

text-align: left;

}

.or_price{

color: rgba(242,58,58,0.8);

text-decoration: line-through;

}

.goods_name{

margin-top: 4%;

}

.now_and_or{

margin-top: 5%;

}

.now_price{

font-size: 1rem;

}

/*计算结果的盒子*/

.count_box{

width: 70vw;

margin-left:15vw;

height: auto;

border: 2px dashed rgb(253,234,93);

display: flex;

align-items: center;

padding: 2%;

position: relative;

}

.count_box .goods_img{

width: 100px;

height: 100px;

margin:0;

box-shadow: none;

}

.count_box ul{

width: 100%;

overflow:auto;

}

.count_box ul li{

float: left;

cursor: pointer;

font-size: 0.6rem;

display: flex;

align-items: center;

align-content: center;

padding-top: 2%;

padding-bottom: 1%;

border-radius: 4px;

}

.count_box ul li .price{

text-align: center;

}

.img_box{

position: relative;

}

.add{

font-size: 2rem;

color:rgb(253,234,93);

margin-left: 20px;

}

.delete{

display: flex;

align-items: center;

color:rgb(253,234,93);

font-size: 34px;

position: absolute;

top: -25%;

right: -9%;

cursor: pointer;

z-index: 1;

}

/*计算结果*/

.result{

margin-top: 16%;

margin-left: -30px;

font-size: 1rem;

display: flex;

align-items: center;

text-align: left;

background: rgb(214,175,209);

}

.result_content{

display: block;

margin-left: 2rem;

}

.or_amount{

text-decoration: line-through;

line-height: 2rem;

}

.equal_to{

font-size: 2rem;

color:rgb(253,234,93);

}

.now_amount span{

color:rgb(253,234,93);

}

.img01{

position: absolute;

}

.buy{

position: absolute;

right: 12px;

bottom: 10px;

font-size: 0.75rem;

}

</style>

</head>

<body>

<!-- 商品计算器 -->

<div id="app">

<div class="goods_box">

<ul>

<li class="goods" v-for="(item, index) in list" @click="choose(index)">

<img class="goods_img" v-bind:src="item.goods_img">

<div class="price">

<div class="goods_name">

{{item.name}}

</div>

<div class="now_and_or">

<div class="now">现价:<span class="now_price">{{item.hide_price}}¥</span></div>

<div class="or">原价:<span class="or_price">{{item.or_price}}¥</span></div>

</div>

</div>

</li>

</ul>

</div>

<div class="count_box">

<ul>

<li v-for="(item, index) in count_list" @click="deleteGoods(index)">

<div class="count_box_item">

<div class="img_box">

<div class="delete">×</div>

<img class="goods_img" v-bind:src="item.goods_img">

</div>

</div>

<div class="add">+</div>

</li>

<li>

<div class="result">

<div class="equal_to">=</div>

<div class="result_content">

<div class="or_amount">原价:{{or_amount}}¥</div>

<div class="now_amount">现价:<span>{{now_amount}}¥</span></div>

</div>

</div>

</li>

</ul>

<a class="buy" href="#" rel="external nofollow" >立即购买</a>

</div>

</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>

<script type="text/javascript">

var idsArray = [];

var or_priceArray = [];

var now_priceArray = [];

//数组去重

function removeDuplicatedItem(arr) {

for(var i = 0; i < arr.length-1; i++){

for(var j = i+1; j < arr.length; j++){

if(arr[i]==arr[j]){

arr.splice(j,1);

j--;

}

}

}

return arr;

}

var app = new Vue({

el:"#app",

data:{

// 商品列表

list:[

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"100",

now_price:"10",

//显示的价格

hide_price:"50",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"200",

now_price:"20",

hide_price:"?",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"300",

now_price:"30",

hide_price:"50",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"100",

now_price:"10",

hide_price:"50",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"200",

now_price:"20",

hide_price:"?",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"300",

now_price:"30",

hide_price:"50",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"100",

now_price:"10",

hide_price:"50",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"200",

now_price:"20",

hide_price:"50",

name:"很长很长的名字"

},

{

goods_img:"http://cdn.w7.cc/images/2018/05/19/mdqzEyVEeqBdK3xKulqskX9ryMMfTbgbU1jMOE7i.jpeg?imageView2/5/w/88/format/png",

or_price:"300",

now_price:"30",

hide_price:"50",

name:"很长很长的名字"

}

],

//动态选择列表

count_list:[],

//原总价

or_amount:0,

//现总价

now_amount:0

},

methods:{

choose: function(index){

var arr = this.list;

var that = this;

//清空数组

this.count_list = [];

this.or_amount = 0;

this.now_amount = 0;

or_priceArray = [];

now_priceArray = [];

idsArray.push(index);

//数组去重

removeDuplicatedItem(idsArray);

//循环打印选中商品

for( var i=0;i<idsArray.length;i++){

that.count_list.push(arr[idsArray[i]]);

or_priceArray.push(parseInt(arr[idsArray[i]].or_price));

now_priceArray.push(parseInt(arr[idsArray[i]].now_price));

}

//循环计算价格

for(var i=0;i<or_priceArray.length;i++){

this.or_amount += or_priceArray[i];

this.now_amount += now_priceArray[i];

}

},

//删除商品

deleteGoods: function(index){

this.or_amount = 0;

this.now_amount = 0;

this.count_list.splice(index,1);

idsArray.splice(index,1);

or_priceArray.splice(index,1);

now_priceArray.splice(index,1);

//循环计算价格

for(var i=0;i<or_priceArray.length;i++){

this.or_amount += or_priceArray[i];

this.now_amount += now_priceArray[i];

}

}

}

})

</script>

</body>

</html>

总结

以上所述是小编给大家介绍的vue实现商品加减计算总价,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

以上是 vue实现商品加减计算总价的实例代码 的全部内容, 来源链接: utcz.com/z/348186.html

回到顶部