console
var skuList = [{
SkuId: 51,
SkuName: "重量",
ValueList: [
{ ValueId: 110, ValueName: "15g" },
{ ValueId: 109, ValueName: "25g" },
]
},
{
SkuId: 10243628,
SkuName: "大小",
ValueList: [
{ ValueId: 10243731, ValueName: "x" },
{ ValueId: 10243732, ValueName: "m" },
{ ValueId: 10243733, ValueName: "l" },
]
},
{
SkuId: 1001,
SkuName: "颜色",
ValueList: [
{ ValueId: 100101, ValueName: "黄色" },
{ ValueId: 100102, ValueName: "绿色" },
{ ValueId: 100103, ValueName: "蓝色" },
]
}
];
var skuSelectList = [
{ Sku: "61_110_10243731_100101", Price: 1212.00, "Stock": 12 },
{ Sku: "61_110_10243732_100102", Price: 21.00, "Stock": 9 },
{ Sku: "61_110_10243733_100103", Price: 121.00, "Stock": 1 },
{ Sku: "61_109_10243731_100101", Price: 212.00, "Stock": 5 },
{ Sku: "61_109_10243732_100102", Price: 1.00, "Stock": 8 },
{ Sku: "61_109_10243733_100103", Price: 12.00, "Stock": 7 }
];
var pid = 61;
$(function() {
skuInit();
$("#btn1").on("click", function() {
$(".sku_box").show();
})
$(".sku_close").on("click",function(){
$(".sku_box").hide()
})
priceAndStock(0)
$(".sku_list").on("click", "li", function() {
if($(this).hasClass('sku_none')) {
return;
}
$(this).toggleClass("active");
if($(this).hasClass('active')) {
$(this).siblings("li").removeClass("active");
}
var select_ids = _getSelAttrId();
var $_sel_goods_attr = $('li.active').parents('.sku_list');
var all_ids = filterAttrs(select_ids);
var $other_notsel_attr = $('.sku_list').not($_sel_goods_attr);
$other_notsel_attr.each(function() {
set_block($(this), all_ids);
});
$_sel_goods_attr.each(function() {
update_2($(this));
});
showSelectSku();
if($(".sku_item").length == $("#sku_select .shop_sku").length) {
var selectSku = getSelectSku();
priceAndStock(selectSku)
}else{
priceAndStock(0)
}
checkShopNum()
})
var num = 1
$("#minus").on("click", function() {
num--
$("#shop_num").text(num--)
checkShopNum()
})
$("#plus").on("click", function() {
num++
$("#shop_num").text(num);
checkShopNum()
})
$("#inputShopCart").on("click", function() {
if($(".sku_item").length != $("#sku_select .shop_sku").length) {
alert("请选择商品规格")
return false;
}
var getSelectSkus = getSelectSku();
var num = parseInt($("#shop_num").text());
alert("你选择的skuId为:"+getSelectSkus +",数量为:"+num)
})
})
function getSelectSku(){
var result;
result = pid;
$("#sku_select .shop_sku").each(function(k, v) {
result += "_" + $(v).attr("valueid");
})
return result;
}
function priceAndStock(n) {
var maxStock = 0;
var minprice = skuSelectList[0].Price;
for(var i = 0; i < skuSelectList.length; i++) {
maxStock += skuSelectList[i].Stock;
minprice = minprice < skuSelectList[i].Price ? minprice : skuSelectList[i].Price
if(skuSelectList[i].Sku == n) {
$("#proStock").text(skuSelectList[i].Stock);
$("#proPrice").text(skuSelectList[i].Price)
return false;
} else {
$("#proStock").text(maxStock);
$("#proPrice").text(minprice);
}
}
}
function skuInit() {
if(skuList.length == 0) {
return false;
}
$(".sku_bd").empty();
for(var i = 0; i < skuList.length; i++) {
var skuItem = $('<div class="sku_item"></div>')
var label = $('<label skuId="' + skuList[i].SkuId + '">' + skuList[i].SkuName + '</label>')
var ulList = $('<ul class="sku_list" id="sku_list' + i + 1 + '">')
var d = skuList[i].ValueList
for(var j = 0; j < d.length; j++) {
var lis = $('<li valueId="' + d[j].ValueId + '">' + d[j].ValueName + '</li>')
ulList.append(lis);
}
skuItem.append(label);
skuItem.append(ulList);
$(".sku_bd").append(skuItem);
}
}
function filterProduct(ids) {
var result = [];
$(skuSelectList).each(function(k, v) {
_attr = '_' + v.Sku + '_';
_all_ids_in = true;
for(k in ids) {
if(_attr.indexOf('_' + ids[k] + '_') == -1) {
_all_ids_in = false;
break;
}
}
if(_all_ids_in) {
result.push(v);
}
});
return result;
}
function filterAttrs(ids) {
var products = filterProduct(ids);
var result = [];
$(products).each(function(k, v) {
result = result.concat(v['Sku'].split('_'));
});
return result;
}
function _getSelAttrId() {
var list = [];
$('.sku_list li.active').each(function() {
list.push($(this).attr('valueId'));
});
return list;
}
function update_2($goods_attr) {
var select_ids = _getSelAttrId();
var $li = $goods_attr.find('li.active');
var select_ids2 = del_array_val(select_ids, $li.attr('valueId'));
var all_ids = filterAttrs(select_ids2);
set_block($goods_attr, all_ids);
}
function set_block($goods_attr, all_ids) {
$goods_attr.find('li').each(function(k2, li2) {
if($.inArray($(li2).attr('valueId'), all_ids) == -1) {
$(li2).addClass('sku_none');
} else {
$(li2).removeClass('sku_none');
}
});
}
function del_array_val(arr, val) {
var a = [];
for(k in arr) {
if(arr[k] != val) {
a.push(arr[k]);
}
}
return a;
}
function showSelectSku() {
$("#sku_select").empty();
$(".sku_list").each(function(i, item) {
var m = $(item).find(".active")
var sp = $('<span></span>');
sp.attr("valueId", m.attr("valueId"))
sp.text(m.text())
if(m.text().length != 0) {
sp.addClass("shop_sku")
}
$("#sku_select").append(sp)
})
}
function checkShopNum() {
if(parseInt($("#shop_num").text()) <= 1) {
$("#shop_num").text("1")
$("#minus").addClass("minus_not")
} else {
$("#minus").removeClass("minus_not")
}
if(parseInt($("#shop_num").text()) >= parseInt($("#proStock").text())) {
$("#shop_num").text($("#proStock").text());
$("#plus").addClass("plus_not");
} else {
$("#plus").removeClass("plus_not");
}
}
<div class="sku_box">
<div class="sku_close">×</div>
<div class="sku_hd flex_box">
<div class="img_box">
<img src="" alt="这是商品图片"/>
</div>
<ul class="flex1">
<li style="color: #057778;">¥<em id="proPrice">113</em></li>
<li>
<label>库存:</label>
<span id="proStock">7</span></li>
<li>
<label>规格:</label>
<span id="sku_select">
</span>
</li>
</ul>
</div>
<div class="sku_bd">
</div>
<div class="sku_ft ">
<div class="clearfix">
<label>数量</label>
<ul class="count clearfix">
<li class="plus" id="plus">+</li>
<li id="shop_num">1</li>
<li class="minus minus_not" id="minus">-</li>
</ul>
</div>
<button type="button" class="btn big_btn" id="inputShopCart">加入购物车</button>
</div>
</div>
<footer>
<button type="button" class="btn" id="btn1">加入购物车</button>
</footer>
body {
background-color: palegoldenrod;
position: relative;
}
footer {
border: 1px solid red;
height: 50px;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
}
.btn {
padding: 0 15px;
height: 35px;
line-height: 35px;
border: 1px solid #057778;
font-size: 16px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
background-color: #057778;
color: #FFFFFF;
}
.big_btn{
width: 98%;
margin: 20px 1% 0 ;
}
.clearfix:after {content: "";display: block;visibility: hidden;height: 0;clear: both;}
.clearfix {zoom: 1;}
em,i{font-style:normal;}
.noline {
word-wrap: break-word;
word-break: break-all;
}
.line {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: keep-all;
}
.flex_box {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
align-items: center;
-webkit-align-items: center;
}
.flex1 {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.sku_box{
background-color: #FFFFFF;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 10px 15px 15px 15px;
font-size: 16px;
z-index: 100;
}
.sku_close{
position: absolute;
right: 10px;
top: 10px;
width: 30px;
height: 30px;
font-size: 32px;
color: #CCCCCC;
}
.sku_hd{
border-bottom: 1px solid #ddd;
padding: 10px 0;
font-size: 14px;
color: #898989;
}
.img_box{
width: 80px;
height: 80px;
margin-right: 10px;
}
.img_box img{
width: 100%;
height: 100%;
}
.sku_hd li{
line-height: 1.8;
}
.sku_hd li span{
margin-right: 10px;
}
.sku_hd li label{
margin-right: 10px;
}
.sku_bd label,.sku_ft label{
font-size: 14px;
color: #898989;
line-height: 30px;
}
.sku_item{
border-bottom: 1px solid #ddd;
padding: 10px 0;
}
.sku_list li{
height: 35px;
line-height: 35px;
color: #333333;
background-color: #EaEaEa;
font-size: 16px;
display: inline-block;
padding: 0 15px;
margin-top: 10px;
margin-right: 10px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
font-size: 14px;
}
body .active{
background-color: #057778;
color: #FFFFFF;
}
body .sku_none{
color: #ccc;
}
.sku_ft{
padding: 10px 0;
}
.count{
float: right;
}
.count li{
float: right;
text-align: center;
}
.minus,.plus{
width: 20px;
border: 1px solid #000;
color: #000000;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
height: 20px ;
margin-top: 5px;
font-size: 20px;
line-height: 18px;
}
.minus_not,.plus_not{
border: 1px solid #CCCCCC;
color: #CCCCCC;
}
.count li:nth-of-type(2){
width: 60px;
padding: 0 5px;
line-height: 30px;
}