亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序實戰商城系列之購物車功能開發方法

2020-03-21 16:23:14
字體:
來源:轉載
供稿:網友
自從認識某人后,
收獲了兩個成功:登錄成功、付款成功
還擁有了自己的一輛車:購物車
發現了自己的不足之處:余額不足

為大家介紹的就是購物車,這里演示從商品列表中添加到購物車。

下面先做商品列表頁。如下圖:

微信小程序,商城,購物車,小程序開發

布局分析:

首先一個list的主盒子,接著是item盒子,這是必須的。
然后把item分成左側的圖片部分,和右側的說明部分(item盒子使用橫向彈性盒)
右側的說明部分又分上下2部分(右側說明部分盒子使用縱向彈性盒)
下面價錢購物車部分(下面價錢購物車部分也使用橫向彈性盒,中間使用justify-content: space-between;填充空白)

微信小程序,商城,購物車,小程序開發

index.wxml:

<!--主盒子--> <view class="container"> <!--head--> <view class="tit"> <view class="title_val">商品列表</view> <view class="more">更多</view> </view> <!--list--> <view class="goodslist"> <!--item--> <block wx:for="{{goodslist}}"> <view class="goods"> <!--左側圖片盒子--> <view> <img class="good-img" src="{{item.imgUrl}}" /> </view> <!--右側說明部分--> <view class="good-cont"> <!--上--文字說明--> <view class="goods-navigator"> <text class="good-name">{{item.name}}</text> </view> <!--下--價格部分--> <view class="good-price"> <text>¥{{item.price}}</text> <img bindtap="addcart" class="cart" id="{{item.id}}" src="/images/new_73.jpg" /> </view> </view> </view> </block> </view> </view> 

index.wxss:

<code class="language-text">[css] view plain copy/**index.wxss**/ page{  height: 100%;  }  .container{  background: #f5f5f5;  }  .tit{  display: flex;     flex-direction: row;     justify-content: space-between;  height: 30px;  position: relative;  }  .tit::before{  content:&#39;&#39;;  background: #ffcc00;  width:5px;  height: 100%;  position: absolute;     left: 0;     top: 0;  }  .title_val{  padding: 0 15px;  font-size: 14px;  color: #555;  line-height: 30px;  }  .more{  font-size: 12px;  line-height: 30px;  color: #999;  padding: 0 5px 0 0 ;  }  .goodslist{  background: #fff;  display: flex;     flex-direction: column;  }  .goods{  display: flex;     flex-direction: row;  border-bottom: 1px solid #ddd;  }  .good-img{  padding: 5px;  width: 80px;  height: 80px;  }  .good-cont{  display: flex;     flex: 1;     flex-direction: column;  font-size: 14px;  }  .goods-navigator{  display: flex;     flex: 1;     flex-direction: column;     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;  }  </code>

index.js:

數據部分,一般情況都是訪問接口獲取數據的,這里并沒有使用網絡訪問,為了簡化demo,直接把一組數據放在data對象中。同學們可以根據其數據結構自己編寫后臺接口。

<code class="language-text">[javascript] view plain copyPage({     data: {         goodslist: [             {                 id:&quot;001&quot;,                 imgUrl:&quot;https://img5.imgtn.bdimg.com/it/u=2906541843,1492984080&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;女裝T恤中長款大碼擺裙春夏新款&quot;,                 price:&quot;65.00&quot;            },             {                 id:&quot;002&quot;,                 imgUrl:&quot;https://img4.imgtn.bdimg.com/it/u=1004404590,1607956492&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;火亮春秋季 男青年修身款圓領男士T恤&quot;,                 price:&quot;68.00&quot;            },             {                 id:&quot;003&quot;,                 imgUrl:&quot;https://img1.imgtn.bdimg.com/it/u=2305064940,3470659889&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;新款立體掛脖t恤女短袖大碼寬松條紋V領上衣顯瘦休閑春夏&quot;,                 price:&quot;86.00&quot;            },             {                 id:&quot;004&quot;,                 imgUrl:&quot;https://img4.imgtn.bdimg.com/it/u=3986819380,1610061022&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;男運動上衣春季上新品 上衣流行裝青年&quot;,                 price:&quot;119.00&quot;            },             {                 id:&quot;005&quot;,                 imgUrl:&quot;https://img1.imgtn.bdimg.com/it/u=3583238552,3525141111&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;時尚字母三角露胸t恤女裝亮絲大碼寬松不規則春夏潮&quot;,                 price:&quot;69.00&quot;            },             {                 id:&quot;006&quot;,                 imgUrl:&quot;https://img2.imgtn.bdimg.com/it/u=1167272381,3361826143&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;新款立體掛脖t恤短袖大碼寬松條紋V領上衣顯瘦休閑春夏&quot;,                 price:&quot;86.00&quot;            },             {                 id:&quot;007&quot;,                 imgUrl:&quot;https://img0.imgtn.bdimg.com/it/u=789486313,2033571593&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;時尚字母三角露胸t恤女裝亮絲大碼寬松不規則春夏潮&quot;,                 price:&quot;119.00&quot;            },             {                 id:&quot;008&quot;,                 imgUrl:&quot;https://img2.imgtn.bdimg.com/it/u=3314044863,3966877419&amp;fm=23&amp;gp=0.jpg&quot;,                 name:&quot;男運動上衣春季上新品 上衣流行裝青年&quot;,                 price:&quot;69.00&quot;            },         ]     },  // 加入購物車    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(&#39;cart&#39;) || [];  // 如果購物車有數據 if(arr.length&gt;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(&#39;cart&#39;, 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(&#39;cart&#39;, arr)  // 返回(在if內使用return,跳出循環節約運算,節約性能) return;                 } catch (e) {                     console.log(e)                 }             }         }     }  })  </code>

編寫購物車部分,如下圖所示:

微信小程序,商城,購物車,小程序開發

布局分析:

首先一個list的主盒子,接著是item盒子,這是必須的。

然后把item分成左側的圖片部分,和右側的說明部分(item盒子使用橫向彈性盒)

右側的說明部分又分上下2部分(右側說明部分盒子使用縱向彈性盒)

下面價錢、購物加減、購物車部分(使用縱向彈性盒)

最下面的購物加減、購物車部分(使用橫向彈性盒,中間使用justify-content: space-between;填充空白)

微信小程序,商城,購物車,小程序開發

cart.wxml:

<code class="language-text">[html] view plain copy<!--要是夠車內沒有數據,就行顯示沒有數據--> <view class="cart" hidden="{{iscart}}"> <img src="/images/cart.png" /> <view>購物車什么都沒有,趕快去購物吧</view> </view> <!--要是有數據,就顯示數據--> <view class="cartList" hidden="{{!iscart}}"> <!--header--> <view class="baoyou"></view> <!--list item--> <block wx:for="{{cart}}"> <view class="goods"> <!--左側圖片--> <view> <img class="good-img" src="{{item.imgUrl}}" /> </view> <!--右側說明部分--> <view class="good-cont"> <!--文字說明--> <view class="goods-navigator"> <text class="good-name">{{item.name}}</text> </view> <!--價錢和購物加減的父盒子--> <view class="good-price"> <text class="price">¥{{item.price}}</text> <view class="btn-box"> <view class="btn"><button bindtap="delCount" id="del{{index}}" size="mini" type="default">-</button> <input value="{{item.count}}" /><button bindtap="addCount" id="add{{index}}" size="mini" type="default">+</button> </view> <img bindtap="delGoods" id="img{{index}}" src="/images/del2.png" /> </view> </view> </view> </view> </block> <!--footer--> <view class="total"> <view class="total_text">合計:<text>¥{{total}}</text></view><button class="total_js" size="mini">去結算({{goodsCount}})</button> </view> </view> </code>

cart.wxss:

<code class="language-text">[css] view plain copypage {  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;  }  </code></pre></p><p>cart.js:</p><p class="highlight"><pre><code class="language-text">[html] view plain copyPage({     data: {         iscart: false,         cart: [], //數據         count: 1,   //商品數量默認是1         total: 0,    //總金額         goodsCount: 0 //數量     },     onLoad: function (options) {     },     onShow: function () {         var that = this;         // 獲取產品展示頁保存的緩存數據(購物車的緩存數組,沒有數據,則賦予一個空數組)         var arr = wx.getStorageSync(&#39;cart&#39;) || [];         // 有數據的話,就遍歷數據,計算總金額 和 總數量         if (arr.length &gt; 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 &lt;= 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(&#39;cart&#39;, this.data.cart)         } catch (e) {             console.log(e)         }     },     /* 加數 */     addCount: function (e) {         // 商品總數量+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(&#39;cart&#39;, this.data.cart)         } catch (e) {             console.log(e)         }     },     /* 刪除item */     delGoods: function (e) {         // 商品總數量  減去  對應刪除項的數量  this.data.goodsCount = this.data.goodsCount - this.data.cart[e.target.id.substring(3)].count;         // 總價錢  減去  對應刪除項的單價*數量         this.data.total -= this.data.cart[e.target.id.substring(3)].price * this.data.cart[e.target.id.substring(3)].count;         // 主體數據的數組移除該項         this.data.cart.splice(e.target.id.substring(3), 1);         // 更新data數據對象         this.setData({             cart: this.data.cart,             total: this.data.total,             goodsCount: this.data.goodsCount         })         // 主體數據重新賦入緩存內         try {             wx.setStorageSync(&#39;cart&#39;, this.data.cart)         } catch (e) {             console.log(e)         }     }  })  </code>

運行結果:


 

 

微信小程序,商城,購物車,小程序開發

 

 

demo:https://download.csdn.net/detail/michael_ouyang/9825344


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成avwww人| 欧美午夜www高清视频| 亚洲天堂视频在线观看| 色悠悠久久88| 久久精品国产69国产精品亚洲| 国产精品欧美日韩久久| 久久av红桃一区二区小说| 国产精品狼人色视频一区| 高清日韩电视剧大全免费播放在线观看| 九九综合九九综合| 国产精品免费小视频| 久久国产精品网站| 国产精品久久久久久超碰| 九九综合九九综合| 日韩av高清不卡| **欧美日韩vr在线| 欧美人在线视频| 日韩av网址在线观看| 97精品伊人久久久大香线蕉| 精品性高朝久久久久久久| 68精品国产免费久久久久久婷婷| 91亚洲精品视频| 91久久精品久久国产性色也91| 久久久99免费视频| 国产精品久久久久久久久久小说| 国产一区二区久久精品| 日韩欧美在线免费| 欧美最猛性xxxxx免费| 日韩精品久久久久久久玫瑰园| 亚洲男人的天堂在线| 欧美激情网站在线观看| 欧美激情精品久久久久久大尺度| 久久精品国产亚洲| 日韩视频精品在线| 国产精品美女视频网站| 精品国产91久久久| 亚洲图中文字幕| 国产精品亚洲欧美导航| 欧美激情在线视频二区| 国产成人97精品免费看片| 国产在线98福利播放视频| 国产免费观看久久黄| 精品国内亚洲在观看18黄| 久久成人18免费网站| 国产亚洲欧美一区| 国产精品三级久久久久久电影| 久久精品99久久香蕉国产色戒| 91国内精品久久| 欧美精品999| 久久99久久久久久久噜噜| 国产日产欧美精品| 精品人伦一区二区三区蜜桃网站| 日本精品久久久久影院| 日韩成人xxxx| 日本视频久久久| 国产精品 欧美在线| 日韩在线视频线视频免费网站| 久久久久免费精品国产| 国产日韩在线视频| 国产视频精品久久久| 综合136福利视频在线| 久久综合伊人77777蜜臀| 国产精品男女猛烈高潮激情| 欧美一区二区三区……| 91国产在线精品| 精品欧美激情精品一区| 欧美性在线观看| 久久久天堂国产精品女人| 欧美日韩亚洲系列| 中文国产成人精品久久一| 欧美激情综合色综合啪啪五月| 91麻豆桃色免费看| 亚洲精品福利在线观看| 国产精品伦子伦免费视频| 精品欧美激情精品一区| 国产伦精品一区二区三区精品视频| 亚洲伊人一本大道中文字幕| 91精品国产综合久久久久久久久| 欧美黑人一级爽快片淫片高清| 精品视频—区二区三区免费| 国产精品一区久久久| 国产成人在线播放| 国产精品国产三级国产aⅴ浪潮| 亚洲欧美制服综合另类| 88xx成人精品| 欧美极品第一页| 久久免费视频在线观看| 欧美激情国产高清| 精品亚洲va在线va天堂资源站| 97视频网站入口| 国产精品免费小视频| 欧美性一区二区三区| 久久精品国产2020观看福利| 中文字幕亚洲一区二区三区| 欧美日韩黄色大片| 国产欧美亚洲精品| 亚洲性猛交xxxxwww| 日本亚洲欧洲色α| 日韩大胆人体377p| 精品国产一区av| 97国产精品视频| 日本精品久久久久影院| 日韩在线中文字幕| 亚洲美女av网站| 国产精品第8页| 日韩激情av在线免费观看| 久久久亚洲国产| 性欧美长视频免费观看不卡| 亚洲国产精品成人精品| 欧美最猛性xxxxx(亚洲精品)| 国产99在线|中文| 国产精品aaa| 日韩中文在线中文网三级| 日韩成人中文字幕在线观看| 亚洲色无码播放| 两个人的视频www国产精品| 日韩午夜在线视频| 欧美一级片一区| 黄色精品在线看| 伊人久久久久久久久久久久久| 亚洲精品国偷自产在线99热| 国产亚洲激情视频在线| 久久全球大尺度高清视频| 国产成人在线视频| 中文字幕久久久av一区| 91九色国产在线| 国产激情久久久| 亚洲欧洲日产国码av系列天堂| 久久伊人精品一区二区三区| 亚洲国产精品字幕| 米奇精品一区二区三区在线观看| 欧美中文字幕第一页| 欧美视频专区一二在线观看| 6080yy精品一区二区三区| 欧美激情欧美激情| 久久全球大尺度高清视频| 欧美老女人bb| 狠狠色狠狠色综合日日五| 午夜精品久久久久久久99黑人| 久久激情五月丁香伊人| 国产成人aa精品一区在线播放| 欧美激情视频在线观看| 亚洲成人1234| 久久亚洲精品中文字幕冲田杏梨| 欧美激情综合亚洲一二区| 国产精品久久久久久久app| 欧美精品成人在线| 欧美黑人视频一区| 91chinesevideo永久地址| 亚洲精品国产电影| 亚洲影视九九影院在线观看| 国产欧美日韩中文| 欧美老少做受xxxx高潮| 亚洲japanese制服美女| 日韩有码在线观看| 成人免费在线视频网站| 国产精品wwww| 91免费观看网站| 国产裸体写真av一区二区| 黄色91在线观看| 久久成人人人人精品欧| 成人在线激情视频| 97激碰免费视频| 久久91亚洲精品中文字幕|