微信小程序之购物车 —— 微信小程序实战商城系列(5)

justify-content: center;

}

.good-name{

display: flex;

flex: 1;

flex-direction: column;

color: #555;

justify-content: center;

}

.good-price{

display: flex;

flex: 1;

flex-direction: row;

justify-content: space-between;

color:#e4393c;

font-weight: 600;

}

.cart{

width: 40px;

height: 40px;

padding-right: 10px;

}

index.js:

数据部分,一般情况都是访问接口获取数据的,这里并没有使用网络访问,为了简化demo,直接把一组数据放在data对象中。同学们可以根据其数据结构自己编写后台接口

Page({

data: {

goodslist: [

{

id:“001”,

imgUrl:“http://img5.imgtn.bdimg.com/it/u=2906541843,1492984080&fm=23&gp=0.jpg”,

name:“女装T恤中长款大码摆裙春夏新款”,

price:“65.00”

},

{

id:“002”,

imgUrl:“http://img4.imgtn.bdimg.com/it/u=1004404590,1607956492&fm=23&gp=0.jpg”,

name:“火亮春秋季 男青年修身款圆领男士T恤”,

price:“68.00”

},

{

id:“003”,

imgUrl:“http://img1.imgtn.bdimg.com/it/u=2305064940,3470659889&fm=23&gp=0.jpg”,

name:“新款立体挂脖t恤女短袖大码宽松条纹V领上衣显瘦休闲春夏”,

price:“86.00”

},

{

id:“004”,

imgUrl:“http://img4.imgtn.bdimg.com/it/u=3986819380,1610061022&fm=23&gp=0.jpg”,

name:“男运动上衣春季上新品 上衣流行装青年”,

price:“119.00”

},

{

id:“005”,

imgUrl:“http://img1.imgtn.bdimg.com/it/u=3583238552,3525141111&fm=23&gp=0.jpg”,

name:“时尚字母三角露胸t恤女装亮丝大码宽松不规则春夏潮”,

price:“69.00”

},

{

id:“006”,

imgUrl:“http://img2.imgtn.bdimg.com/it/u=1167272381,3361826143&fm=23&gp=0.jpg”,

name:“新款立体挂脖t恤短袖大码宽松条纹V领上衣显瘦休闲春夏”,

price:“86.00”

},

{

id:“007”,

imgUrl:“http://img0.imgtn.bdimg.com/it/u=789486313,2033571593&fm=23&gp=0.jpg”,

name:“时尚字母三角露胸t恤女装亮丝大码宽松不规则春夏潮”,

price:“119.00”

},

{

id:“008”,

imgUrl:“http://img2.imgtn.bdimg.com/it/u=3314044863,3966877419&fm=23&gp=0.jpg”,

name:“男运动上衣春季上新品 上衣流行装青年”,

price:“69.00”

},

]

},

// 加入购物车

addcart:function(e){

this.setData({

toastHidden:false

});

// 遍历列表 与 购物车列表

for (var i in this.data.goodslist){

// 列表中某一项item的id == 点击事件传递过来的id。则是被点击的项

if(this.data.goodslist[i].id == e.target.id){

// 给goodsList数组的当前项添加count元素,值为1,用于记录添加到购物车的数量

this.data.goodslist[i].count = 1;

// 获取购物车的缓存数组(没有数据,则赋予一个空数组)

var arr = wx.getStorageSync(‘cart’) || [];

// 如果购物车有数据

if(arr.length>0){

// 遍历购物车数组

for(var j in arr){

// 判断购物车内的item的id,和事件传递过来的id,是否相等

if(arr[j].id == e.target.id){

// 相等的话,给count+1(即再次添加入购物车,数量+1)

arr[j].count = arr[j].count + 1;

// 最后,把购物车数据,存放入缓存(此处不用再给购物车数组push元素进去,因为这个是购物车有的,直接更新当前数组即可)

try {

wx.setStorageSync(‘cart’, arr)

} catch (e) {

console.log(e)

}

// 返回(在if内使用return,跳出循环节约运算,节约性能)

return;

}

}

// 遍历完购物车后,没有对应的item项,把goodslist的当前项放入购物车数组

arr.push(this.data.goodslist[i]);

}

// 购物车没有数据,把item项push放入当前数据(第一次存放时)

else{

arr.push(this.data.goodslist[i]);

}

// 最后,把购物车数据,存放入缓存

try {

wx.setStorageSync(‘cart’, arr)

// 返回(在if内使用return,跳出循环节约运算,节约性能)

return;

} catch (e) {

console.log(e)

}

}

}

}

})

编写购物车部分,如下图所示:

布局分析:

首先一个list的主盒子,接着是item盒子,这是必须的。

然后把item分成左侧的图片部分,和右侧的说明部分(item盒子使用横向弹性盒)

右侧的说明部分又分上下2部分(右侧说明部分盒子使用纵向弹性盒)

下面价钱、购物加减、购物车部分(使用纵向弹性盒)

最下面的购物加减、购物车部分(使用横向弹性盒,中间使用justify-content: space-between;填充空白)

cart.wxml:

购物车什么都没有,赶快去购物吧

{{item.name}}

¥{{item.price}}

-

+

合计: ¥{{total}}

去结算({{goodsCount}})

cart.wxss:

page {

background: #f2ebe3;

}

.cart {

padding: 100px 0 0 0;

display: flex;

justify-content: center;

flex-direction: column;

align-items: center;

color: #999;

}

.cart image {

width: 66px;

height: 66px;

margin-bottom: 20px;

}

.baoyou {

font-size: 18px;

color: #db2929;

padding: 10px;

}

.goods {

background: #fff;

border-top: 1px solid #ddd;

margin-bottom: 10px;

padding: 10px 10px 0 10px;

display: flex;

}

.goods image {

width: 80px;

height: 80px;

border: 1px solid #ddd;

}

.goods .good-cont {

display: flex;

flex: 1;

flex-direction: column;

color: #555;

font-size: 14px;

padding: 5px;

height: 100px;

}

.goods .good-cont .goods-navigator {

display: flex;

flex: 2;

}

.goods .good-cont .good-price {

display: flex;

flex-direction: column;

flex: 3;

}

.goods .good-cont .good-price .price {

font-size: 16px;

color: #ec5151;

}

.goods .good-cont .good-price .btn-box {

display: flex;

flex-direction: row;

justify-content: space-between;

}

.goods .good-cont .good-price .btn-box image {

width: 23px;

height: 23px;

border: 0;

margin: 0;

}

.goods .good-cont .good-price .btn {

display: flex;

flex-direction: row;

}

.goods .good-cont .good-price .btn input {

margin: 0;

width: 40px;

text-align: center;

border: 1px solid #eee;

font-size: 16px;

height: 28px;

}

.goods .good-cont .good-price .btn button {

margin: 0;

}

.total {

height: 40px;

display: flex;

flex-direction: row;

justify-content: space-between;

padding: 0 20px;

}

.total .total_text {

display: flex;

color: #777;

}

.total .total_text text {

color: #ec5151;

}

.total .total_js {

color: #fff;

background: #ec5151;

height: 30px;

margin: 0;

}

cart.js:

Page({

data: {

iscart: false,

cart: [], //数据

count: 1, //商品数量默认是1

total: 0, //总金额

goodsCount: 0 //数量

},

onLoad: function (options) {

},

onShow: function () {

var that = this;

// 获取产品展示页保存的缓存数据(购物车的缓存数组,没有数据,则赋予一个空数组)

var arr = wx.getStorageSync(‘cart’) || [];

// 有数据的话,就遍历数据,计算总金额 和 总数量

if (arr.length > 0) {

for (var i in arr) {

that.data.total += Number(arr[i].price) * Number(arr[i].count);

that.data.goodsCount += Number(arr[i].count);

}

// 更新数据

this.setData({

iscart: true,

cart: arr,

total: that.data.total,

goodsCount: that.data.goodsCount

});

}

},

onHide: function(){

// 清除数据

this.setData({

iscart: false,

cart: [], //数据

total: 0, //总金额

goodsCount: 0 //数量

});

},

/* 减数 */

delCount: function (e) {

console.log(e)

// 获取购物车该商品的数量

// [获取设置在该btn的id,即list的index值]

if (this.data.cart[e.target.id.substring(3)].count <= 1) {

return;

}

// 商品总数量-1

this.data.goodsCount -= 1;

// 总价钱 减去 对应项的价钱单价

this.data.total -= Number(this.data.cart[e.target.id.substring(3)].price);

// 购物车主体数据对应的项的数量-1 并赋给主体数据对应的项内

this.data.cart[e.target.id.substring(3)].count = --this.data.cart[e.target.id.substring(3)].count;

// 更新data数据对象

this.setData({

cart: this.data.cart,

total: this.data.total,

goodsCount: this.data.goodsCount

})

// 主体数据重新赋入缓存内

try {

wx.setStorageSync(‘cart’, this.data.cart)

} catch (e) {

关于面试的充分准备

一些基础知识和理论肯定是要背的,要理解的背,用自己的语言总结一下背下来。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,我能明显感觉到国庆后多了很多高级职位,所以努力让自己成为高级工程师才是最重要的。

好了,希望对大家有所帮助。

接下来是整理的一些Android学习资料,有兴趣的朋友们可以关注下我免费领取方式

①Android开发核心知识点笔记

②对标“阿里 P7” 40W+年薪企业资深架构师成长学习路线图

③面试精品集锦汇总

④全套体系化高级架构视频

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
{

关于面试的充分准备

一些基础知识和理论肯定是要背的,要理解的背,用自己的语言总结一下背下来。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,我能明显感觉到国庆后多了很多高级职位,所以努力让自己成为高级工程师才是最重要的。

好了,希望对大家有所帮助。

接下来是整理的一些Android学习资料,有兴趣的朋友们可以关注下我免费领取方式

①Android开发核心知识点笔记

②对标“阿里 P7” 40W+年薪企业资深架构师成长学习路线图

[外链图片转存中…(img-TRnPYlbL-1715265771953)]

③面试精品集锦汇总

[外链图片转存中…(img-7Ph97GWa-1715265771954)]

④全套体系化高级架构视频

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

[外链图片转存中…(img-MKD7d9Ou-1715265771955)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值