欧洲变态另类zozo,欧美xxxx做受欧美gaybdsm,欧洲熟妇色xxxx欧美老妇软件,免费人成视频xvideos入口 ,欧美.日韩.国产.中文字幕

歡迎光臨本站
我們一直在努力

微信小程序中購(gòu)物車(chē)的簡(jiǎn)單實(shí)例

這篇文章主要介紹了微信小程序 購(gòu)物車(chē)簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下

微信小程序,這里實(shí)現(xiàn)購(gòu)物車(chē)功能的小demo,有需要此功能的朋友可以參考下。

摘要: 加減商品數(shù)量,匯總價(jià)格,全選與全不選

設(shè)計(jì)思路:

一、從網(wǎng)絡(luò)上傳入以下Json數(shù)據(jù)格式的數(shù)組 1.購(gòu)物車(chē)id:cid 2.標(biāo)題title 3.數(shù)量num 4.圖片地址 5.價(jià)格price 6.小計(jì) 7.是否選中selected

二、點(diǎn)擊復(fù)選框toggle操作 如已經(jīng)選中的,經(jīng)點(diǎn)擊變成未選中,反之而反之 點(diǎn)擊依據(jù)index作為標(biāo)識(shí),而不用cid,方便遍歷

三、全選操作 首次點(diǎn)擊即為全部選中,再次點(diǎn)擊為全不選,全選按鈕本身也跟隨toggle變換

四、點(diǎn)擊結(jié)算按鈕,將已選中的cid數(shù)組取出,以供通過(guò)網(wǎng)絡(luò)提交到服務(wù)端,這里給個(gè)toast作為結(jié)果演示。

五、利用stepper作加減運(yùn)算,同樣依據(jù)index作為標(biāo)識(shí),點(diǎn)完寫(xiě)回num值。

六、布局,全選與結(jié)算按鈕底部對(duì)齊,購(gòu)物車(chē)商城自適應(yīng)高度,類似于Android的weight。

步驟:

初始數(shù)據(jù)渲染

1.1 布局與樣式表

上方是一個(gè)商品列表,下方是一個(gè)全選按鈕與立即結(jié)算按鈕

商品列表左部為商品縮略圖,右上為商品標(biāo)題,右下為商品價(jià)格與數(shù)量,其中商品數(shù)量使用WXStepper來(lái)實(shí)現(xiàn)加減操作

js:初始化一個(gè)數(shù)據(jù)源,這往往是從網(wǎng)絡(luò)獲取的,相關(guān)接口可參見(jiàn):https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html

Page({
  data:{
    carts: [
      {cid:1008,title:'Zippo打火機(jī)',image:'https://img12.360buyimg.com/n7/jfs/t2584/348/1423193442/572601/ae464607/573d5eb3N45589898.jpg',num:'1',price:'198.0',sum:'198.0',selected:true},
      {cid:1012,title:'iPhone7 Plus',image:'https://img13.360buyimg.com/n7/jfs/t3235/100/1618018440/139400/44fd706e/57d11c33N5cd57490.jpg',num:'1',price:'7188.0',sum:'7188.0',selected:true},
      {cid:1031,title:'得力訂書(shū)機(jī)',image:'https://img10.360buyimg.com/n7/jfs/t2005/172/380624319/93846/b51b5345/5604bc5eN956aa615.jpg',num:'3',price:'15.0',sum:'45.0',selected:false},
      {cid:1054,title:'康師傅妙芙蛋糕',image:'https://img14.360buyimg.com/n7/jfs/t2614/323/914471624/300618/d60b89b6/572af106Nea021684.jpg',num:'2',price:'15.2',sum:'30.4',selected:false},
      {cid:1063,title:'英雄鋼筆',image:'https://img10.360buyimg.com/n7/jfs/t1636/60/1264801432/53355/bb6a3fd1/55c180ddNbe50ad4a.jpg',num:'1',price:'122.0',sum:'122.0',selected:true},
    ]
  }
})
登錄后復(fù)制

布局文件

<view class="container carts-list">
  <view wx:for="{{carts}}" class="carts-item" data-title="{{item.title}}" data-url="{{item.url}}" bindtap="bindViewTap">
    <view>
     <image class="carts-image" src="{{item.image}}" mode="aspectFill"/>
    </view>
   <view class="carts-text">
    <text class="carts-title">{{item.title}}</text>
    <view class="carts-subtitle">
     <text class="carts-price">{{item.sum}}</text>
     <text>WXStepper</text>
    </view>
   </view>
  </view>
</view>
登錄后復(fù)制

樣式表

/*外部容器*/
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
} 

/*整體列表*/
.carts-list {
  display: flex;
  flex-direction: column;
  padding: 20rpx 40rpx;
}

/*每行單元格*/
.carts-item {
  display: flex;
  flex-direction: row;
  height:150rpx;
  /*width屬性解決標(biāo)題文字太短而縮略圖偏移*/
  width:100%;
  border-bottom: 1px solid #eee;
  padding: 30rpx 0;
}

/*左部圖片*/
.carts-image {
  width:150rpx;
  height:150rpx;
}

/*右部描述*/
.carts-text {
  width: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

/*右上部分標(biāo)題*/
.carts-title {
  margin: 10rpx;
  font-size: 30rpx;
}

/*右下部分價(jià)格與數(shù)量*/
.carts-subtitle {
  font-size: 25rpx;
  color:darkgray;
  padding: 0 20rpx;
  display: flex;
  flex-direction: row;
  justify-content:space-between;
}

/*價(jià)格*/
.carts-price {
  color: #f60;
}
登錄后復(fù)制

1.2 集成WXStepper

1.2.1 復(fù)制組件內(nèi)容

[2016-10-16]

將stepper.wxss的內(nèi)容復(fù)制到cart.wxss中

將stepper.wxml的內(nèi)容復(fù)制到cart.wxml中

與之前的單一組件不同的是:這里要定義數(shù)組minusStatuses來(lái)與每一個(gè)加減按鈕相應(yīng)。當(dāng)然,合并入carts也是沒(méi)問(wèn)題的。

minusStatuses: [‘disabled’, ‘disabled’, ‘normal’, ‘normal’, ‘disabled’]

原來(lái)的靜態(tài)字符WXStepper換成以下的代碼

 <view class="stepper">
        <!-- 減號(hào) -->
        <text class="{{minusStatuses[index]}}" data-index="{{index}}" bindtap="bindMinus">-</text>
        <!-- 數(shù)值 -->
        <input type="number" bindchange="bindManual" value="{{item.num}}" />
        <!-- 加號(hào) -->
        <text class="normal" data-index="{{index}}" bindtap="bindPlus">+</text>
       </view>
登錄后復(fù)制

js代碼bindMinus、bindPlus分別改造為如下:

bindMinus: function(e) {
    var index = parseInt(e.currentTarget.dataset.index);
    var num = this.data.carts[index].num;
    // 如果只有1件了,就不允許再減了
    if (num > 1) {
      num --;
    }
    // 只有大于一件的時(shí)候,才能normal狀態(tài),否則disable狀態(tài)
    var minusStatus = num <= 1 ? 'disabled' : 'normal';
    // 購(gòu)物車(chē)數(shù)據(jù)
    var carts = this.data.carts;
    carts[index].num = num;
    // 按鈕可用狀態(tài)
    var minusStatuses = this.data.minusStatuses;
    minusStatuses[index] = minusStatus;
    // 將數(shù)值與狀態(tài)寫(xiě)回
    this.setData({
      carts: carts,
      minusStatuses: minusStatuses
    });
  },
  bindPlus: function(e) {
    var index = parseInt(e.currentTarget.dataset.index);
    var num = this.data.carts[index].num;
    // 自增
    num ++;
    // 只有大于一件的時(shí)候,才能normal狀態(tài),否則disable狀態(tài)
    var minusStatus = num <= 1 ? 'disabled' : 'normal';
    // 購(gòu)物車(chē)數(shù)據(jù)
    var carts = this.data.carts;
    carts[index].num = num;
    // 按鈕可用狀態(tài)
    var minusStatuses = this.data.minusStatuses;
    minusStatuses[index] = minusStatus;
    // 將數(shù)值與狀態(tài)寫(xiě)回
    this.setData({
      carts: carts,
      minusStatuses: minusStatuses
    });
  },
登錄后復(fù)制

效果如圖:

[2016-10-17]

修正手工改動(dòng)數(shù)量保存到數(shù)組

1.3 集成LXCheckboxGroup

復(fù)制布局文件代碼到wxml,這里需要判斷一下已選狀態(tài),一般購(gòu)物車(chē)勾選狀態(tài)是記錄在網(wǎng)絡(luò)的。

index值用于傳值js,遍歷之用。

 <!-- 復(fù)選框圖標(biāo) -->
    <icon wx:if="{{item.selected}}" type="success_circle" size="20" bindtap="bindCheckbox" data-index="{{index}}"/>
    <icon wx:else type="circle" size="20" bindtap="bindCheckbox" data-index="{{index}}"/>
登錄后復(fù)制

復(fù)選框居中

/*復(fù)選框樣式*/
.carts-list icon {
  margin-top: 60rpx;
  margin-right: 20rpx;
}
登錄后復(fù)制

綁定點(diǎn)擊復(fù)選框事件,對(duì)選擇狀態(tài)做反選操作。

  bindCheckbox: function(e) {
    /*綁定點(diǎn)擊事件,將checkbox樣式改變?yōu)檫x中與非選中*/
    //拿到下標(biāo)值,以在carts作遍歷指示用
    var index = parseInt(e.currentTarget.dataset.index);
    //原始的icon狀態(tài)
    var selected = this.data.carts[index].selected;
    var carts = this.data.carts;
    // 對(duì)勾選狀態(tài)取反
    carts[index].selected = !selected;
    // 寫(xiě)回經(jīng)點(diǎn)擊修改后的數(shù)組
    this.setData({
      carts: carts
    });
  }
登錄后復(fù)制

效果圖:

1.4 加入全選與立即結(jié)算按鈕

1.4.1 修改布局文件,實(shí)現(xiàn)上述按鈕底部對(duì)齊,使用flex與固定高度來(lái)完成。

減少為3行,看是否還在最底;此外,還要保證懸浮在底部,不被列表項(xiàng)的滾動(dòng)而滾動(dòng)。

 <view class="carts-footer">
    <view bindtap="bindSelectAll">
      <icon wx:if="{{selectedAllStatus}}" type="success_circle" size="20"/>
      <icon wx:else type="circle" size="20" />
      <text>全選</text>
    </view>
    <view class="button">立即結(jié)算</view>
  </view>
登錄后復(fù)制

之前用來(lái)實(shí)現(xiàn),發(fā)現(xiàn)無(wú)論如何都不能實(shí)現(xiàn)全選部件與結(jié)算按鈕分散對(duì)齊,不響應(yīng)如下樣式

  display: flex;
  flex-direction: row;
  justify-content: space-between;
登錄后復(fù)制

樣式表

/*底部按鈕*/
.carts-footer {
  width: 100%;
  height: 80rpx;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}

/*復(fù)選框*/
.carts-footer icon {
  margin-left: 20rpx;
}

/*全選字樣*/
.carts-footer text {
  font-size: 30rpx;
  margin-left: 8rpx;
  line-height: 10rpx;
}

/*立即結(jié)算按鈕*/
.carts-footer .button {
  line-height: 80rpx;
  text-align: center;
  width:220rpx;
  height: 80rpx;
  background-color: #f60;
  color: white;
  font-size: 36rpx;
  border-radius: 0;
  border: 0;
}
登錄后復(fù)制

1.4.2 全選與全不選事件

實(shí)現(xiàn)bindSelectAll事件,改變?nèi)x狀態(tài)

首先定義一個(gè)data值,以記錄全選狀態(tài)

selectedAllStatus: false

事件實(shí)現(xiàn):

 bindSelectAll: function() {
    // 環(huán)境中目前已選狀態(tài)
    var selectedAllStatus = this.data.selectedAllStatus;
    // 取反操作
    selectedAllStatus = !selectedAllStatus;
    // 購(gòu)物車(chē)數(shù)據(jù),關(guān)鍵是處理selected值
    var carts = this.data.carts;
    // 遍歷
    for (var i = 0; i < carts.length; i++) {
      carts[i].selected = selectedAllStatus;
    }
    this.setData({
      selectedAllStatus: selectedAllStatus,
      carts: carts
    });
  }
登錄后復(fù)制

1.4.3 立即結(jié)算顯示目前所選的cid,以供提交到網(wǎng)絡(luò),商品數(shù)量應(yīng)該是包括在cid中的,后端設(shè)計(jì)應(yīng)該只關(guān)注cid與uid

布局文件也埋一下toast,js只要改變toast的顯示與否即可。

<toast hidden="{{toastHidden}}" bindchange="bindToastChange">
  {{toastStr}}
</toast>
登錄后復(fù)制

為立即結(jié)算綁定事件bindCheckout,彈出cid彈窗

 bindCheckout: function() {
    // 初始化toastStr字符串
    var toastStr = 'cid:';
    // 遍歷取出已勾選的cid
    for (var i = 0; i < this.data.carts.length; i++) {
      if (this.data.carts[i].selected) {
        toastStr += this.data.carts[i].cid;
        toastStr += ' ';
      }
    }
    //存回data
    this.setData({
      toastHidden: false,
      toastStr: toastStr
    });
  },
  bindToastChange: function() {
    this.setData({
      toastHidden: true
    });
  }
登錄后復(fù)制

1.5 底部懸浮固定

1.5.1 商品列表 .carts-list 加入 margin-bottom: 80rpx; 以及修改上邊距為零,使得底部部件與分隔不重復(fù)出現(xiàn),padding: 0 40rpx;

1.5.2 底部按鈕 .carts-footer 加入 background: white;

1.5.3 .carts-footer 加入

  position: fixed;
  bottom: 0;
  border-top: 1px solid #eee;
登錄后復(fù)制

1.6 匯總

1.6.1 首先定義一個(gè)數(shù)據(jù)源,并在布局文件中埋坑

total: ”

{{total}}

1.6.2 通用匯總函數(shù)

sum: function() {
    var carts = this.data.carts;
    // 計(jì)算總金額
    var total = 0;
    for (var i = 0; i < carts.length; i++) {
      if (carts[i].selected) {
        total += carts[i].num * carts[i].price;
      }
    }
    // 寫(xiě)回經(jīng)點(diǎn)擊修改后的數(shù)組
    this.setData({
      carts: carts,
      total: '¥' + total
    });
  }
登錄后復(fù)制

然后分別在bindMinus bindPlus bindCheckbox bindSelectAll onLoad中調(diào)用this.sum()

如圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)!

相關(guān)推薦:

以上就是微信小程序中購(gòu)物車(chē)的簡(jiǎn)單實(shí)例的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注有卡有網(wǎng)。

版權(quán)聲明:本文采用知識(shí)共享 署名4.0國(guó)際許可協(xié)議 [BY-NC-SA] 進(jìn)行授權(quán)
文章名稱:《微信小程序中購(gòu)物車(chē)的簡(jiǎn)單實(shí)例》
文章鏈接:http://www.ljxxtl.cn/kaquan-baike/xcx/154426.html
本站資源僅供個(gè)人學(xué)習(xí)交流,請(qǐng)于下載后24小時(shí)內(nèi)刪除,不允許用于商業(yè)用途,否則法律問(wèn)題自行承擔(dān)。