完全なショッピングカートを実装するためのミニプログラム

完全なショッピングカートを実装するためのミニプログラム

ミニプログラムは、参考までに完全なショッピングカート[すべて選択/選択解除して金額を計算/加算と減算して数量と金額を計算]を実装しています。具体的な内容は次のとおりです。

1. wxml ページ コード モジュール

<view wx:if="{{hasList}}">
  <view class="order_list">
    <view class="order" wx:for="{{list}}" wx:key="{{index}}">
      <view class="xuanze" wx:if="{{item.selected}}" catchtap="selectList" data-index="{{index}}">
        <画像 src="/images/serch/xuanze.png" />
      </ビュー>
      <view class="xuanze" catchtap="selectList" data-index="{{index}}" wx:else>
        <画像 src="/images/serch/gouxuan.png" />
      </ビュー>
      <!--製品画像の一覧-->
      <view class="order_img">
        <画像 src="{{item.image}}" />
      </ビュー>
      <view class="order_text">
        <view class="text_top">
          <!--リストタイトル-->
          <view class="title">{{item.title}}</view>
          <view class="detel" catchtap="deletes" data-index="{{index}}">
            <画像 src="/images/serch/detel.png" />
          </ビュー>
        </ビュー>
        <!--仕様-->
        <view class="size">仕様: {{item.pro_name}}</view>
        <view class="text_bottom">
          <!--価格-->
          <view class="money">¥{{item.price}}</view>
          <!-- 商品の数量を追加または減らす -->
          <view class="number">
            <!--マイナスボタン-->
            <view class="reduce" catchtap="btn_minus" data-obj="{{obj}}" data-index="{{index}}">
              <!--ボタン画像-->
              <画像 src="/images/serch/jian-1.png" />
            </ビュー>
            <!--数量-->
            <view class="numb">{{item.num}}</view>
            <!--追加ボタン-->
            <view class="add" catchtap="btn_add" data-index="{{index}}">
              <!--ボタン画像-->
              <画像 src="/images/serch/add-1.png" />
            </ビュー>
          </ビュー>
        </ビュー>
      </ビュー>
    </ビュー>
  </ビュー>

  <!-- 下部を固定 -->
  <view class="buy">
    <view class="buy_top">
      <ビュークラス="top_left">
        <view class="left_img" catchtap="selectAll" wx:if="{{selectAllStatus}}">
          <画像 src="/images/serch/gouxuan.png" />
        </ビュー>
        <view class="left_img" catchtap="selectAll" wx:else>
          <画像 src="/images/serch/gouxuan.png" />
        </ビュー>
        <view class="left_name">すべて選択</view>
      </ビュー>
      <ビュークラス="top_left">
        <view class="left_img">
          <画像 src="/images/serch/fenxiang.png" />
        </ビュー>
        <view class="left_name">共有</view>
      </ビュー>
    </ビュー>
    <view class="buy_bottom">
      <view class="buy_left">
        <view class="heji">合計金額: ¥{{totalPrice}}</view>
      </ビュー>
      <view class="buy_right">
        <!--注文を送信-->
        <view class="liji " catchtap="btn_submit_order">今すぐ購入</view>
        <view class="liji two active">フィッティングの予約</view>
      </ビュー>
    </ビュー>
  </ビュー>
</ビュー>
<!--ショッピングカートに注文がありません-->
<wx:else を表示>
  <view class="list_none">ショッピングカートは空です~</view>
</ビュー>

2. スタイルコード

ページ {
  背景色: rgba(238, 238, 238, 0.5);
}

。注文 {
  高さ: 238rpx;
  背景色: #fefeff;
  マージン: 27rpx;
  境界線の半径: 4rpx;
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
}

.玄澤{
  幅: 40rpx;
  高さ: 40rpx;
  /* 背景色: darkgoldenrod; */
  境界線の半径: 50%;
  マージン: 0 11rpx;
}

.画像を選択{
  幅: 100%;
  高さ: 100%;
  表示: ブロック;
  境界線の半径: 50%;
}

.order_img {
  幅: 180rpx;
  高さ: 180rpx;
}

.order_img 画像 {
  幅: 100%;
  高さ: 100%;
  表示: ブロック;
}

.order_text {
  左マージン: 20rpx;
  幅: 58%;
  高さ: 180rpx;
}

.text_top {
  ディスプレイ: フレックス;
  コンテンツの両端揃え: スペースの間;
  アイテムの位置を中央揃えにします。
}

。タイトル {
  幅: 70%;
  フォントサイズ: 28rpx;
  色: #4b5248;
  ディスプレイ: -webkit-box;
  -webkit-box-orient: 垂直;
  -webkit-line-clamp: 1;
  オーバーフロー: 非表示;
}

.detel {
  幅: 30rpx;
  高さ: 30rpx;
}

.detel画像{
  幅: 100%;
  高さ: 100%;
  表示: ブロック;
}

。サイズ {
  フォントサイズ: 24rpx;
  色: #a8ada6;
}

.text_bottom {
  ディスプレイ: フレックス;
  上マージン: 50rpx;
  アイテムの位置を中央揃えにします。
  コンテンツの両端揃え: スペースの間;
}

。お金 {
  フォントサイズ: 30rpx;
  色: #a5937f;
}

。番号 {
  ディスプレイ: フレックス;
  コンテンツの両端揃え: スペースを空ける;
  アイテムの位置を中央揃えにします。
  幅: 170rpx;
}

。減らす {
  幅: 46rpx;
  高さ: 46rpx;
}

.reduce画像{
  幅: 100%;
  高さ: 100%;
  表示: ブロック;
}

。麻痺 {
  フォントサイズ: 30rpx;
  色: #a5937f;
}

。追加 {
  幅: 46rpx;
  高さ: 46rpx;
}

.画像を追加{
  幅: 100%;
  高さ: 100%;
  表示: ブロック;
}

/*購入ボタン*/

。買う {
  高さ: 180rpx;
  幅: 696rpx;
  位置: 固定;
  左: 27rpx;
  下部: 41rpx;
  背景色: #555555f3;
  境界線の半径: 4rpx;
}

.buy_top {
  下境界線: 1px 実線 rgb(98, 98, 99);
  高さ: 75rpx;
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
  コンテンツの両端揃え: スペースの間;
}

.左上 {
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
}

.left_img {
  幅: 37rpx;
  高さ: 37rpx;
  マージン: 11rpx;
}

.left_img 画像 {
  幅: 100%;
  高さ: 100%;
  表示: ブロック;
}

.左の名前{
  フォントサイズ: 24rpx;
  色: #fefeff;
  右マージン: 29rpx;
}

.buy_bottom {
  ディスプレイ: フレックス;
  高さ: 104rpx;
  コンテンツの両端揃え: スペースの間;
  アイテムの位置を中央揃えにします。
  パディング: 0rpx 30rpx 0rpx 12rpx;
}

.buy_left {
  フォントサイズ: 26rpx;
  色: #fff;
}

.購入権{
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
}

.liji {
  幅: 180rpx;
  高さ: 70rpx;
  境界線: 2rpx実線rgba(248, 248, 248, 1);
  ボックスのサイズ: 境界線ボックス;
  境界線の半径: 4rpx;
  行の高さ: 70rpx;
  テキスト配置: 中央;
  フォントサイズ: 26rpx;
  色: #FEFEFF;
}
。二{
  左マージン: 12rpx;
}
。アクティブ{
  背景色: #A5937F;
  境界線: なし;
}

3. js コードモジュール

ページ({

  /**
   * ページの初期データ */
  データ: {
    hasList: true, //デフォルトの表示リストデータ //製品リストデータ list: [{
        id: 1,
        タイトル: 「ガーデナーズ アンチリンクル エッセンス」
        画像: '/images/serch/2.png',
        pro_name: "30ml",
        番号: 1,
        価格: 180,
        選択: true
      },
      {
        id: 2,
        タイトル:「エブリンローズハンドクリーム」
        画像: '/images/serch/1.png',
        プロ名: "25g",
        番号: 1,
        価格: 62,
        選択: true
      },
      {
        id: 2,
        タイトル:「オートミール ヤギミルク スージング ハンドクリーム」
        画像: '/images/serch/2.png',
        pro_name: "75ml",
        番号: 1,
        価格: 175,
        選択: true
      }
    ]、
    //金額 totalPrice: 0, //合計価格、最初は0
    //すべてのステータスを選択 selectAllStatus: true, //すべてのステータスを選択、デフォルトですべて選択されています},

  /**
   * ライフサイクル機能 - ページの読み込みをリッスンする*/
  onLoad: 関数(オプション) {

  },

  /**
   * ライフサイクル機能 - モニターページ表示 */
  onShow: 関数() {
    wx.showToast({
      タイトル: 「読み込み中」
      アイコン: 「読み込み中」、
      期間: 1000
    })
    //価格メソッド this.count_price();

  },

  /** 現在の製品選択イベント*/
  選択リスト(e) {
    var that = this;
    //選択されたラジオ インデックスを取得します。var index = e.currentTarget.dataset.index;
    //製品リストデータを取得します。var list = that.data.list;
    // デフォルトですべて選択 that.data.selectAllStatus = true;
    //配列データをループし、選択/未選択を判断する[選択済み]
    リスト[インデックス].selected = !リスト[インデックス].selected;
    //配列データがすべて選択されている場合[true]、すべて選択する for (var i = list.length - 1; i >= 0; i--) {
      if (!list[i].selected) {
        that.data.selectAllStatus = false;
        壊す;
      }
    }
    // データを再レンダリングする that.setData({
      リスト: リスト、
      selectAllStatus: that.data.selectAllStatus
    })
    // 金額を計算するメソッドを呼び出します that.count_price();
  },

  // 削除 deletes(e) {
    var that = this;
    // インデックスを取得します。const index = e.currentTarget.dataset.index;
    // 製品リストデータを取得します。let list = this.data.list;
    wx.showModal({
      タイトル: 「ヒント」
      内容: 「本当に削除しますか?」
      成功: function(res) {
        (res.confirm)の場合{
          // インデックスを1から削除
          リスト.splice(インデックス、1);
          // ページレンダリングデータ that.setData({
            リスト: リスト
          });
          // データが空の場合 if (!list.length) {
            that.setData({
              リストがある: false
            });
          } それ以外 {
            // 金額レンダリングデータを呼び出します that.count_price();
          }
        } それ以外 {
          コンソールログ(res);
        }
      },
      失敗: 関数(res) {
        コンソールログ(res);
      }
    })
  },

  /** ショッピングカートの完全選択イベント*/
  すべて選択(e) {
    // デフォルトですべてのアイコンを選択します let selectAllStatus = this.data.selectAllStatus;
    // 真 ----- 偽
    すべてのステータスを選択します。
    // 製品データを取得します。let list = this.data.list;
    // リストをループして、データが選択されているかどうかを判断します for (let i = 0; i < list.length; i++) {
      リスト[i].selected = selectAllStatus;
    }
    // ページの再レンダリング this.setData({
      全てのステータスを選択: 全てのステータスを選択、
      リスト: リスト
    });
    // 金額を計算するメソッド this.count_price();
  },

  /** バインディングプラス数量イベント*/
  btn_add(e) {
    // クリックされたインデックスを取得します。const index = e.currentTarget.dataset.index;
    // 製品データを取得します。let list = this.data.list;
    // 製品の数を取得します。let num = list[index].num;
    // クリックして増加 num = num + 1;
    リスト[インデックス].num = num;
    // 再レンダリング --- 新しい数量を表示 this.setData({
      リスト: リスト
    });
    // 金額を計算するメソッド this.count_price();
  },

  /**
   * バインド数量削減イベント */
  btn_minus(e) {
    // // クリックされたインデックスを取得します。const index = e.currentTarget.dataset.index;
    // 定数 obj = e.currentTarget.dataset.obj;
    // コンソールログ(obj);
    // 製品データを取得します。let list = this.data.list;
    // 製品の数を取得します。let num = list[index].num;
    // num が 1 以下かどうかをチェックします return; 無効をクリックします if (num <= 1) {
      false を返します。
    }
    // それ以外の場合は、num が 1 より大きい場合は減算ボタンをクリックします。
    数値 = 数値 - 1;
    リスト[インデックス].num = num;
    // ページをレンダリングする this.setData({
      リスト: リスト
    });
    // 金額を計算するメソッドを呼び出します this.count_price();
  },

  // 注文を送信 btn_submit_order() {
    var that = this;
    console.log(that.data.totalPrice);

    // 支払いの呼び出し // wx.requestPayment(
    // {
    // 'タイムスタンプ': ''、
    // 'nonceStr': ''、
    // 'パッケージ': ''、
    // 'signType': 'MD5',
    // 'paySign': ''、
    // '成功': function (res) { },
    // '失敗': 関数 (res) { },
    // '完了': 関数 (res) { }
    // })
    wx.showModal({
      タイトル: 「ヒント」
      内容: '合計金額 -' + that.data.totalPrice + "まだ開発されていません",
    })
  },

  /**
   * 合計金額を計算 */
  カウント価格() {
    // 製品リストデータを取得します。let list = this.data.list;
    //配列定価を受け取る変数を宣言する
    合計を 0 にします。
    // リストをループして各データを取得します for (let i = 0; i < list.length; i++) {
      // 選択して価格を計算するかどうかを決定します if (list[i].selected) {
        // すべての価格を合計する count_money
        合計 += リスト[i].num * リスト[i].price;
      }
    }
    //最後に値をデータに割り当ててページにレンダリングします this.setData({
      リスト: リスト、
      合計価格: total.toFixed(2)
    });
  },

})

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChat アプレット ショッピング カートの簡単な例
  • WeChat ミニプログラムの実践: ショッピングカートの実装コード例
  • WeChatアプレットは、複数選択ボックスですべてを選択および選択解除し、ショッピングカートで選択したアイテムを削除する機能を実装します。
  • ショッピングカートのコード例を実装するWeChatアプレット
  • WeChatミニプログラムショッピングカート機能
  • WeChatアプレットがショッピングカート機能を実装
  • WeChat アプレットのショッピングカート、親子コンポーネントの値転送、計算の考慮事項の概要
  • ショッピングカートのアイテムの曲線フライイン効果を実現するミニプログラム 2 次ベジェ曲線
  • WeChatアプレットはスワイパー+CSSを使用してショッピングカートの商品削除機能を実現します
  • Python はショッピングカート ショッピング アプレットを実装します

<<:  Linux系でよく使われる運用・保守コマンド(まとめ)

>>:  Mac インストール mysqlclient プロセス分析

ブログ    

推薦する

CentOS8 デプロイメント LNMP 環境で mysql8.0.29 をコンパイルしてインストールする方法の詳細なチュートリアル

1. 前提条件何度かインストールしているので、エラーについてはこれ以上説明しません。ちょっとわかりに...

MySQL マルチテーブルクエリの詳細な説明

よく食べて十分に休息を取るというのは簡単なことのように思えますが、実際に実行するのはそれほど簡単では...

MySQL 5.5.56 インストール不要版の設定方法

MySQL 5.5.56無料インストール版の設定方法をテキストコードで詳しく説明します。具体的な内容...

Docker 上で Redis クラスターを構築する

目次1. イメージをプルする2. Redisコンテナを作成する3. コンテナを起動するためにクラスタ...

SQLはLeetCodeを実装します(180.連続した数字)

[LeetCode] 180. 連続した数字少なくとも 3 回連続して出現するすべての数字を検索す...

Nginx で 403 forbidden を解決するための完全な手順

ウェブページに403 Forbiddenと表示されるNginx (yum インストール ログは通常 ...

CSS3 Flex エラスティックレイアウトのサンプルコードの詳細な説明

1. 基本概念 //任意のコンテナを Flex レイアウトとして指定できます。 。箱{ ディスプレイ...

CentOS で MySQL を完全にアンインストールする方法

この記事では、CentOSでのMySQLの完全アンインストールについて記録しています。具体的な内容は...

CSS で実装された円形のプログレスバー

成果を達成する 実装コードhtml <div class="wrap"&g...

純粋なCSSでは、子要素が親要素の幅制限を突破できる。

文章のスタイルでは、このような状況がよく見られます コードは次のとおりです <div styl...

GolangでMySQLデータベースのバックアップを実装する方法

背景Navicat は、最高の MySQL 視覚化ツールです。ただし、ビューのインポートとエクスポー...

Vue再帰コンポーネントの簡単な使用例

序文多くの学生は既に再帰に精通していると思います。アルゴリズムの問​​題を解決するために再帰がよく使...

Vueプロジェクトでlessを使用するためのヒント

目次序文1. スタイルの浸透1. パターン浸透とは何ですか? 2. 使い方は? 2. ミキシング1....

互換性を維持しながら他のウェブページのデータを適用する iframe の使い方

以下は、Shiji Tiancheng が Tencent KartRider ページを呼び出すため...

Xftp のダウンロードとインストールのチュートリアル (グラフィック チュートリアル)

Windows と Linux 間でファイルを転送する場合は、Xftp ツールを使用できます。この...