1. 程式人生 > >微信小程式全選,微信小程式checkbox,微信小程式購物車

微信小程式全選,微信小程式checkbox,微信小程式購物車

微信小程式,這裡實現微信小程式checkbox,有需要此功能的朋友可以參考下。

摘要: 加減商品數量,彙總價格,全選與全不選

設計思路:

一、從網路上傳入以下Json資料格式的陣列  1.標題title 2.圖片地址 3.數量num 4.價格price  5.是否選中selected 

二、點選複選框toggle操作 如已經選中的,經點選變成未選中,反之而反之 點選依據index作為標識,方便遍歷

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

四、點選結算按鈕,將已選中的陣列取出,以供通過網路提交到服務端,這裡給個toast作為結果演示。

五、利用stepper作加減運算,同樣依據index作為標識,點完寫回num值。

六、佈局,全選與結算按鈕底部對齊,購物車商城自適應高度,類似於Android的weight。

步驟:

初始資料渲染

1.1 佈局與樣式表

上方是一個商品列表,下方是一個全選按鈕與立即結算按鈕

商品列表左部為商品縮圖,右上為商品標題,右下為商品價格與數量,

先看一下效果圖:

       

頁面程式碼如圖:

<view wx:for="{{carts}}" class="carts-item" data-title="{{item.title}}" data-url="{{item.url}}" bindtap="bindViewTap">
<view class="my-wrap"> <view class="my-tlt">


{{item.title}}
</view>
<view class="my-list bordernone">
<icon wx:if="{{item.selected}}" type="success_circle" size="20" bindtap="bindCheckbox" data-index="{{index}}" class="my-check"/>
<icon wx:else type="circle" size="20" bindtap="bindCheckbox" data-index="{{index}}" class="my-check"/>

<image src="{{item.image}}" class="my-pic" mode="aspectFill"></image>
<view class="my-left">
<view class="my-title"> K金磚玉石電視背景牆磚</view>
<text class="my-txt">尺寸:800X800</text>
<view class="my-bnt">

<!-- 減號 -->
<text class="{{minusStatuses[index]}} bnt" data-index="{{index}}" bindtap="bindMinus">-</text>
<!-- 數值 -->
<input type="number" bindchange="bindManual" class="int" value="{{item.num}}" />
<!-- 加號 -->
<text class="normal bnt" data-index="{{index}}" bindtap="bindPlus">+</text>]


</view>
</view>
<view class="my-right">
<icon class="iconfont del"/>
<text class="gay">¥{{item.price}}</text>
</view>
</view>
</view>

<view class="float">

<!-- 全選 -->
<view bindtap="bindSelectAll" class="my-sel" >
<icon wx:if="{{selectedAllStatus}}" type="success_circle" size="20" class="l-mycheck"/>
<icon wx:else type="circle" size="20" class="l-mycheck"/>
<text>全選</text>
</view>
<view class="my-rightbox">
<view class="my-count" data='{{sep}}'>

<!-- 統計 -->
合計(不含運費):¥<text>{{count}}</text>
</view>
<view class="my-bnts" bindtap="setPayment" >
結算(<text>{{number}}</text>)
</view>
</view>
</view>

這裡css自己去寫,這裡不做多介紹,只做效果:

首先:先定義js

在page.data裡面

count:0,
number:0,
minusStatuses: ['disabled', 'disabled', 'normal', 'normal', 'disabled'],
carts: [
{title:'自營商城',image:'../images/my.png',num:'1',price:'198.0',selected:false},
{title:'自營商城',image:'../images/my.png',num:'1',price:'100.0',selected:false},
{title:'自營商城',image:'../images/my.png',num:'3',price:'15.0',selected:false},
{title:'自營商城',image:'../images/my.png',num:'2',price:'15.2',selected:false},
{title:'自營商城',image:'../images/my.png',num:'1',price:'122.0',selected:true},
],

carts這個你可以通過url自己傳參,我這裡自己寫點資料,

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

bindMinus: function(e) {
var index = parseInt(e.currentTarget.dataset.index);

var num = this.data.carts[index].num;

if (num > 0) {
num --;
}
var minusStatus = num <= 0 ? 'disabled' : 'normal';
var carts = this.data.carts;
carts[index].num = num;

var minusStatuses = this.data.minusStatuses;
minusStatuses[index] = minusStatus;

this.setData({
carts: carts,
minusStatuses: minusStatuses
});
},
bindPlus: function(e) {
var index = parseInt(e.currentTarget.dataset.index);
var num = this.data.carts[index].num; 
num ++;
var minusStatus = num <= 1 ? 'disabled' : 'normal';
var carts = this.data.carts;
carts[index].num = num;

var minusStatuses = this.data.minusStatuses;
minusStatuses[index] = minusStatus;

this.setData({
carts: carts,
minusStatuses: minusStatuses
});
}, 

單選:這裡需要判斷一下已選狀態,一般購物車勾選狀態是記錄在網路的。index值用於傳值js,遍歷之用。

bindCheckbox: function(e) {
  var index = parseInt(e.currentTarget.dataset.index);
  var selected = this.data.carts[index].selected;
  var carts = this.data.carts;
var num = parseInt(this.data.carts[index].num); 
var price=this.data.carts[index].price; 
if(!selected){
this.setData({
count:this.data.count+ num*price,
number:num+this.data.number

});
}else{
this.setData({
count:this.data.count- num*price,
number:this.data.number-num

});
}

  carts[index].selected = !selected;
 
  this.setData({
    carts: carts
  });
},

全選與全不選事件

實現bindSelectAll事件,改變全選狀態

首先定義一個data值,以記錄全選狀態

selectedAllStatus: false

事件實現:

bindSelectAll: function() {
var selectedAllStatus = this.data.selectedAllStatus;
selectedAllStatus = !selectedAllStatus;
var carts = this.data.carts;
if(!selectedAllStatus){
for (var i = 0; i < carts.length; i++) {
carts[i].selected = selectedAllStatus;
var num = parseInt(this.data.carts[i].num); 
var price=parseInt(this.data.carts[i].price); 
this.setData({
count:this.data.count-num*price,
number:this.data.number-num

});
}
}

我這裡下面結算是底部懸浮固定,有什麼問題請多指導,