前言
以往的購(gòu)物車,基本上都是透過(guò)大量的 DOM 操作來(lái)實(shí)現(xiàn)。微信小程式其實(shí)跟 vue.js 的用法非常像,接下來(lái)就來(lái)看看小程式可以怎麼實(shí)作購(gòu)物車功能。
需求
先來(lái)弄清楚購(gòu)物車的需求。
單選、全選和取消,而且會(huì)隨著選取的商品計(jì)算出總價(jià)
單一商品購(gòu)買數(shù)量的增加和減少
刪除商品。當(dāng)購(gòu)物車為空時(shí),頁(yè)面會(huì)變成空購(gòu)物車的佈局
根據(jù)設(shè)計(jì)圖,我們可以先實(shí)作靜態(tài)頁(yè)面。接下來(lái),再看看一個(gè)購(gòu)物車需要什麼樣的數(shù)據(jù)。
首先是一個(gè)商品列表(carts),清單裡的單品需要:商品圖(image),商品名(title),單價(jià)(price),數(shù)量(num),是否選取(selected),商品id(id)
然後左下角的全選,需要一個(gè)欄位(selectAllStatus)表示是否全選了
#右下角的總價(jià)(totalPrice)
最後需要知道購(gòu)物車是否為空(hasList)
知道了需要這些數(shù)據(jù),在頁(yè)面初始化的時(shí)候我們先定義好這些。
程式碼實(shí)作
初始化
Page({ ????data:?{ ????????carts:[],???????????????//?購(gòu)物車列表 ????????hasList:false,??????????//?列表是否有數(shù)據(jù) ????????totalPrice:0,???????????//?總價(jià),初始為0 ????????selectAllStatus:true????//?全選狀態(tài),默認(rèn)全選 ????}, ????onShow()?{ ????????this.setData({ ??????????hasList:?true,????????//?既然有數(shù)據(jù)了,那設(shè)為true吧 ??????????carts:[ ????????????{id:1,title:'新鮮芹菜?半斤',image:'/image/s5.png',num:4,price:0.01,selected:true}, ????????????{id:2,title:'素米?500g',image:'/image/s6.png',num:1,price:0.03,selected:true} ??????????] ????????}); ??????}, })
購(gòu)物車列表資料我們一般是透過(guò)請(qǐng)求伺服器拿到的數(shù)據(jù),所以我們放在生命週期函數(shù)裡給 carts 賦值。想到每次進(jìn)到購(gòu)物車都要獲取購(gòu)物車的最新狀態(tài),而onLoad和onReady只在初始化的時(shí)候執(zhí)行一次,所以我需要把請(qǐng)求放在 onShow 函數(shù)裡。 (這裡先拿點(diǎn)假資料冒充一下吧)
佈局 wxml
修好之前寫好的靜態(tài)頁(yè)面,綁定資料。
?<view class="cart-box"> ????<!-- wx:for 渲染購(gòu)物車列表 --> ????<view wx:for="{{carts}}"> ???? ????????<!-- wx:if 是否選擇顯示不同圖標(biāo) --> ????????<icon wx:if="{{item.selected}}" type="success" color="red" bindtap="selectList" data-index="{{index}}" /> ????????<icon wx:else type="circle" bindtap="selectList" data-index="{{index}}"/> ???????? ????????<!-- 點(diǎn)擊商品圖片可跳轉(zhuǎn)到商品詳情 --> ????????<navigator url="../details/details?id={{item.id}}"> ????????????<image class="cart-thumb" src="{{item.image}}"></image> ????????</navigator> ???????? ????????<text>{{item.title}}</text> ????????<text>¥{{item.price}}</text> ???????? ????????<!-- 增加減少數(shù)量按鈕 --> ????????<view> ????????????<text bindtap="minusCount" data-index="{{index}}">-</text> ????????????<text>{{item.num}}</text> ????????????<text bindtap="addCount" data-index="{{index}}">+</text> ????????</view> ???????? ????????<!-- 刪除按鈕 --> ????????<text bindtap="deleteList" data-index="{{index}}">?×?</text> ????</view> </view> <!-- 底部操作欄 --> <view> ????<!-- wx:if 是否全選顯示不同圖標(biāo) --> ????<icon wx:if="{{selectAllStatus}}" type="success_circle" color="#fff" bindtap="selectAll"/> ????<icon wx:else type="circle" color="#fff" bindtap="selectAll"/> ????<text>全選</text> ???? ????<!-- 總價(jià) --> ????<text>¥{{totalPrice}}</text> </view>
計(jì)算總價(jià)
總價(jià)= 選取的商品1的價(jià)格* 數(shù)量選取的商品2的價(jià)格* 數(shù)量...
根據(jù)公式,可以得到
getTotalPrice()?{ ????let?carts?=?this.data.carts;??????????????????//?獲取購(gòu)物車列表 ????let?total?=?0; ????for(let?i?=?0;?i<carts.length; i++) { // 循環(huán)列表得到每個(gè)數(shù)據(jù) if(carts[i].selected) { // 判斷選中才會(huì)計(jì)算價(jià)格 total += carts[i].num * carts[i].price; // 所有價(jià)格加起來(lái) } } this.setData({ // 最后賦值到data中渲染到頁(yè)面 carts: carts, totalPrice: total.toFixed(2) }); }
頁(yè)面中的其他操作會(huì)導(dǎo)致總價(jià)格變動(dòng)的都需要呼叫該方法。
選擇事件
點(diǎn)擊時(shí)選中,再點(diǎn)擊又變成沒(méi)選中狀態(tài),其實(shí)就是改變 selected 欄位。透過(guò) data-index="{{index}}" 把目前商品在清單陣列中的下標(biāo)傳給事件。
<p>selectList(e) {<br/> const index = e.currentTarget.dataset.index; // 獲取data- 傳進(jìn)來(lái)的index<br/> let carts = this.data.carts; // 獲取購(gòu)物車列表<br/> const selected = carts[index].selected; // 獲取當(dāng)前商品的選中狀態(tài)<br/> carts[index].selected = !selected; // 改變狀態(tài)<br/> this.setData({<br/> carts: carts<br/> });<br/> this.getTotalPrice(); // 重新獲取總價(jià)<br/>}<br/></p>
全選事件
全選就是根據(jù)全選狀態(tài)selectAllStatus 去改變每個(gè)商品的selected
<p>selectAll(e) {<br/> let selectAllStatus = this.data.selectAllStatus; // 是否全選狀態(tài)<br/> selectAllStatus = !selectAllStatus;<br/> let carts = this.data.carts;<br/><br/> for (let i = 0; i < carts.length; i++) {<br/> carts[i].selected = selectAllStatus; // 改變所有商品狀態(tài)<br/> }<br/> this.setData({<br/> selectAllStatus: selectAllStatus,<br/> carts: carts<br/> });<br/> this.getTotalPrice(); // 重新獲取總價(jià)<br/>}<br/></p>
增減數(shù)量
點(diǎn)擊號(hào), num加1,點(diǎn)選-號(hào),如果num > 1,則減1
<p>// 增加數(shù)量<br>addCount(e) {<br> ? ?const index = e.currentTarget.dataset.index;<br> ? ?let carts = this.data.carts;<br> ? ?let num = carts[index].num;<br> ? ?num = num + 1;<br> ? ?carts[index].num = num;<br> ? ?this.setData({<br> ? ? ?carts: carts<br> ? ?});<br> ? ?this.getTotalPrice();<br>},<br>// 減少數(shù)量<br>minusCount(e) {<br> ? ?const index = e.currentTarget.dataset.index;<br> ? ?let carts = this.data.carts;<br> ? ?let num = carts[index].num;<br> ? ?if(num <= 1){<br> ? ? ?return false;<br> ? ?}<br> ? ?num = num - 1;<br> ? ?carts[index].num = num;<br> ? ?this.setData({<br> ? ? ?carts: carts<br> ? ?});<br> ? ?this.getTotalPrice();<br>}<br></p>
刪除商品
點(diǎn)擊刪除按鈕則從購(gòu)物車清單中刪除目前元素,刪除之後如果購(gòu)物車為空,改變購(gòu)物車為空標(biāo)識(shí)hasList為false
deleteList(e)?{ ????const?index?=?e.currentTarget.dataset.index; ????let?carts?=?this.data.carts; ????carts.splice(index,1);??????????????//?刪除購(gòu)物車列表里這個(gè)商品 ????this.setData({ ????????carts:?carts ????}); ????if(!carts.length){??????????????????//?如果購(gòu)物車為空 ????????this.setData({ ????????????hasList:?false??????????????//?修改標(biāo)識(shí)為false,顯示購(gòu)物車為空頁(yè)面 ????????}); ????}else{??????????????????????????????//?如果不為空 ????????this.getTotalPrice();???????????//?重新計(jì)算總價(jià)格 ????}??? }
總結(jié)
#雖然一個(gè)購(gòu)物車功能比較簡(jiǎn)單,但是裡面涉及到微信小程式的知識(shí)點(diǎn)還是比較多的,適合新手練習(xí)掌握。
推薦教學(xué):《微信小程式》
以上是微信小程序之購(gòu)物車功能實(shí)現(xiàn)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

閒魚官方微信小程式悄悄上線,在小程式中可以發(fā)布閒置與買家/賣家私訊交流、查看個(gè)人資料及訂單、搜尋物品等,有用好奇閒魚微信小程式叫什麼,現(xiàn)在快來(lái)看一下。閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價(jià)回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個(gè)人資料及訂單、搜尋指定物品等功能;2、在小程式的頁(yè)面中有首頁(yè)、附近、發(fā)閒置、訊息、我的5項(xiàng)功能;3、想要使用的話必要要開通微信支付才可以購(gòu)買;

實(shí)現(xiàn)微信小程式中的圖片濾鏡效果隨著社群媒體應(yīng)用程式的流行,人們?cè)絹?lái)越喜歡在照片中應(yīng)用濾鏡效果,以增強(qiáng)照片的藝術(shù)效果和吸引力。在微信小程式中也可以實(shí)現(xiàn)圖片濾鏡效果,為使用者提供更多有趣和創(chuàng)意的照片編輯功能。本文將介紹如何在微信小程式中實(shí)現(xiàn)圖片濾鏡效果,並提供具體的程式碼範(fàn)例。首先,我們需要在微信小程式中使用canvas元件來(lái)載入和編輯圖片。 canvas元件可以在頁(yè)面

實(shí)現(xiàn)微信小程式中的下拉式選單效果,需要具體程式碼範(fàn)例隨著行動(dòng)互聯(lián)網(wǎng)的普及,微信小程式成為了網(wǎng)路開發(fā)的重要一環(huán),越來(lái)越多的人開始關(guān)注和使用微信小程式。微信小程式的開發(fā)相比傳統(tǒng)的APP開發(fā)更加簡(jiǎn)單快捷,但也需要掌握一定的開發(fā)技巧。在微信小程式的開發(fā)中,下拉式選單是一個(gè)常見的UI元件,實(shí)現(xiàn)了更好的使用者操作體驗(yàn)。本文將詳細(xì)介紹如何在微信小程式中實(shí)現(xiàn)下拉式選單效果,並提供具

閒魚官方微信小程式已經(jīng)悄悄上線,它為用戶提供了一個(gè)便捷的平臺(tái),讓你可以輕鬆地發(fā)布和交易閒置物品。在小程式中,你可以與買家或賣家進(jìn)行私訊交流,查看個(gè)人資料和訂單,以及搜尋你想要的物品。那麼閒魚在微信小程式中究竟叫什麼呢,這篇教學(xué)攻略將為您詳細(xì)介紹,想要了解的用戶們快來(lái)跟著本文繼續(xù)閱讀吧!閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價(jià)回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個(gè)人資料及訂單、搜尋指定物品等功能;2、在小程式的頁(yè)面中有首頁(yè)、附近、發(fā)閒置、訊息、我的5項(xiàng)功能;3、

微信小程式實(shí)現(xiàn)圖片上傳功能隨著行動(dòng)網(wǎng)路的發(fā)展,微信小程式已經(jīng)成為了人們生活中不可或缺的一部分。微信小程式不僅提供了豐富的應(yīng)用場(chǎng)景,還支援開發(fā)者自訂功能,其中包括圖片上傳功能。本文將介紹如何在微信小程式中實(shí)作圖片上傳功能,並提供具體的程式碼範(fàn)例。一、前期準(zhǔn)備工作在開始編寫程式碼之前,我們需要先下載並安裝微信開發(fā)者工具,並註冊(cè)成為微信開發(fā)者。同時(shí),也需要了解微信

使用微信小程式實(shí)現(xiàn)輪播圖切換效果微信小程式是一種輕量級(jí)的應(yīng)用程序,具有簡(jiǎn)單、高效的開發(fā)和使用特點(diǎn)。在微信小程式中,實(shí)作輪播圖切換效果是常見的需求。本文將介紹如何使用微信小程式實(shí)現(xiàn)輪播圖切換效果,並給出具體的程式碼範(fàn)例。首先,在微信小程式的頁(yè)面檔案中,新增一個(gè)輪播圖元件。例如,可以使用<swiper>標(biāo)籤來(lái)實(shí)現(xiàn)輪播圖的切換效果。在該組件中,可以透過(guò)b

實(shí)現(xiàn)微信小程式中的圖片旋轉(zhuǎn)效果,需要具體程式碼範(fàn)例微信小程式是一種輕量級(jí)的應(yīng)用程序,為用戶提供了豐富的功能和良好的用戶體驗(yàn)。在小程式中,開發(fā)者可以利用各種元件和API來(lái)實(shí)現(xiàn)各種效果。其中,圖片旋轉(zhuǎn)效果是一種常見的動(dòng)畫效果,可以為小程式增添趣味性和視覺(jué)效果。在微信小程式中實(shí)作圖片旋轉(zhuǎn)效果,需要使用小程式提供的動(dòng)畫API。以下是一個(gè)具體的程式碼範(fàn)例,展示如何在小程

實(shí)作微信小程式中的滑動(dòng)刪除功能,需要具體程式碼範(fàn)例隨著微信小程式的流行,開發(fā)者在開發(fā)過(guò)程中經(jīng)常會(huì)遇到一些常見功能的實(shí)作問(wèn)題。其中,滑動(dòng)刪除功能是常見、常用的功能需求。本文將為大家詳細(xì)介紹如何在微信小程式中實(shí)現(xiàn)滑動(dòng)刪除功能,並給出具體的程式碼範(fàn)例。一、需求分析在微信小程式中,滑動(dòng)刪除功能的實(shí)作涉及以下要點(diǎn):列表展示:要顯示可滑動(dòng)刪除的列表,每個(gè)列表項(xiàng)目需要包
