微信小程序商城项目之商品属性分类(4)
续上一篇的文章: 所提及的购物数量的加减,现在说说商品属性值联动选择。 为了让同学们有个直观的了解,到电商网截了一个图片,就是红圈所示的部分 现在就为大家介绍这个小组件,在小程序中,该如何去写 下图为本项目的图: wxml: wxss: /全部属性的主盒子/
.commodity_attr_list { background: #fff; padding: 0 20rpx; font-size: 26rpx; overflow: hidden; width: 100%; } /每组属性的主盒子/ .attr_box { width: 100%; overflow: hidden; border-bottom: 1rpx solid #ececec; } /属性名/ .attr_name { width: 20%; float: left; padding: 15rpx 0; } /属性值/ .attr_value_box { width: 80%; float: left; padding: 15rpx 0; overflow: hidden; } /每个属性值/ .attr_value { float: left; padding: 0 10rpx; margin: 0 10rpx; border: 1rpx solid #ececec; } /每个属性选中的当前样式/ .attr_value_active { background: #FFCC00; border-radius: 10rpx; color: #fff; padding: 0 10rpx; } /禁用属性/ .attr_value_disabled { color: #ccc; } /button/ .btn { js: 数据部分,一般情况都是访问接口获取数据的,这里并没有使用网络访问,为了简化demo,直接把一组数据放在data对象中。 = 0) {
// 如果属性值数组中没有该值,push新值;否则不处理
if (!this.isValueExist(commodityAttr[i].attrValueList[j].attrValue,attrValueList[attrIndex].attrValues)) {
attrValueList[attrIndex].attrValues.push(commodityAttr[i].attrValueList[j].attrValue);
}
} else {
attrValueList.push({
attrKey: commodityAttr[i].attrValueList[j].attrKey,attrValues: [commodityAttr[i].attrValueList[j].attrValue]
});
}
}
}
// console.log('result',attrValueList)
for (var i = 0; i < attrValueList.length; i++) {
for (var j = 0; j < attrValueList[i].attrValues.length; j++) {
if (attrValueList[i].attrValueStatus) {
attrValueList[i].attrValueStatus[j] = true;
} else {
attrValueList[i].attrValueStatus = [];
attrValueList[i].attrValueStatus[j] = true;
}
}
}
this.setData({
attrValueList: attrValueList
});
},getAttrIndex: function (attrName,attrValueList) {
// 判断数组中的attrKey是否有该属性值
for (var i = 0; i < attrValueList.length; i++) {
if (attrName == attrValueList[i].attrKey) {
break;
}
}
return i < attrValueList.length ? i : -1;
},isValueExist: function (value,valueArr) {
// 判断是否已有属性值
for (var i = 0; i < valueArr.length; i++) {
if (valueArr[i] == value) {
break;
}
}
return i < valueArr.length;
},/* 选择属性值事件 */
selectAttrValue: function (e) {
/*
点选属性值,联动判断其他属性值是否可选
{
attrKey:'型号','3'],selectedValue:'1',attrValueStatus:[true,true,true]
}
console.log(e.currentTarget.dataset);
*/
var attrValueList = this.data.attrValueList;
var index = e.currentTarget.dataset.index;//属性索引
var key = e.currentTarget.dataset.key;
var value = e.currentTarget.dataset.value;
if (e.currentTarget.dataset.status || index == this.data.firstIndex) {
if (e.currentTarget.dataset.selectedvalue == e.currentTarget.dataset.value) {
// 取消选中
this.disSelectValue(attrValueList,index,key,value);
} else {
// 选中
this.selectValue(attrValueList,value);
}
} // console.log('选中',commodityAttr,value); // 判断属性是否可选 var count = 0; // 判断属性是否可选 for (var i = 0; i < attrValueList.length; i++) { 运行效果: demo地址: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |