JavaScript

超轻量级php框架startmvc

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

更新时间:2020-07-20 10:48:01 作者:startmvc
需求是商品只能选一次,有原价和现价.大概的效果图是这样:完整代码在这里,直接复制就能

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

大概的效果图是这样:

这里写图片描述

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


<!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 实现商品加减 vue 计算总价