vue實現(xiàn)商品加減計算總價的實例代碼
更新時間:2018年08月12日 11:15:14 作者:here962464
這篇文章主要介紹了vue實現(xiàn)商品加減計算總價的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
需求是商品只能選一次,有原價和現(xiàn)價.
大概的效果圖是這樣:

完整代碼在這里,直接復(fù)制就能用:
<!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;
}
/*計算結(jié)果的盒子*/
.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;
}
/*計算結(jié)果*/
.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">現(xiàn)價:<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">現(xiàn)價:<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 = [];
//數(shù)組去重
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:"很長很長的名字"
}
],
//動態(tài)選擇列表
count_list:[],
//原總價
or_amount:0,
//現(xiàn)總價
now_amount:0
},
methods:{
choose: function(index){
var arr = this.list;
var that = this;
//清空數(shù)組
this.count_list = [];
this.or_amount = 0;
this.now_amount = 0;
or_priceArray = [];
now_priceArray = [];
idsArray.push(index);
//數(shù)組去重
removeDuplicatedItem(idsArray);
//循環(huán)打印選中商品
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));
}
//循環(huán)計算價格
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);
//循環(huán)計算價格
for(var i=0;i<or_priceArray.length;i++){
this.or_amount += or_priceArray[i];
this.now_amount += now_priceArray[i];
}
}
}
})
</script>
</body>
</html>
總結(jié)
以上所述是小編給大家介紹的vue實現(xiàn)商品加減計算總價,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
vue項目打包上傳github并制作預(yù)覽鏈接(pages)
這篇文章主要介紹了vue項目打包上傳github并制作預(yù)覽鏈接(pages)的相關(guān)資料,需要的朋友可以參考下2019-04-04
vite+vue3+tsx項目打包后動態(tài)路由無法加載頁面的問題及解決
這篇文章主要介紹了vite+vue3+tsx項目打包后動態(tài)路由無法加載頁面的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
vue3?keep-alive實現(xiàn)tab頁面緩存功能
如何在我們切換tab標(biāo)簽的時候,緩存標(biāo)簽最后操作的內(nèi)容,簡單來說就是每個標(biāo)簽頁中設(shè)置的比如搜索條件及結(jié)果、分頁、新增、編輯等數(shù)據(jù)在切換回來的時候還能保持原樣,這篇文章介紹vue3?keep-alive實現(xiàn)tab頁面緩存功能,感興趣的朋友一起看看吧2023-04-04
VUE如何實現(xiàn)點擊文字添加顏色(動態(tài)修改class)
這篇文章主要介紹了VUE如何實現(xiàn)點擊文字添加顏色(動態(tài)修改class),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
element-ui重置resetFields()不生效的解決
本文主要介紹了element-ui重置resetFields()不生效的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
淺談vue中關(guān)于checkbox數(shù)據(jù)綁定v-model指令的個人理解
這篇文章主要介紹了淺談vue中關(guān)于checkbox數(shù)據(jù)綁定v-model指令的個人理解,v-model用于表單的數(shù)據(jù)綁定很常見,下面就來詳細的介紹一下2018-11-11

