ネイティブjsはショッピングカートのロジックと機能を実装します

ネイティブjsはショッピングカートのロジックと機能を実装します

この記事の例では、ショッピングカートのロジックと機能を実装するためのjsの具体的なコードを共有しています。具体的な内容は次のとおりです。

1. ショッピングカートのメインコンテンツにはテーブルレイアウトを使用する

2. ユーザーがログインしているかどうかを確認する

コードは以下のとおりです。これは、独自のヘッダーのレイアウトに応じて変更できます。

// ユーザーがログインしているかどうかを判断します var username = getCookie("username");
//ログインが成功したら、このコードを実行します if(username){
    var vip = $(`<a href='javascript:;'>ようこそ <b>${username}</b>、Tmall Supermarket へ</a>`)
    var loginout = $(`<a href='javascript:;' class="loginout">ログアウト</a>`)
    $(".hLeft").空()
    $(".hLeft").append(vip)
    $(".hLeft").append(ログインアウト)
    $(".hLeft>a").css({
        "色":"#666",
        "行の高さ":"32px",
        "左余白":"10px"
    })
    $(".hLeft>a>b").css({
        "色":"赤",
        "フォントの太さ":"800",
    })
    $(".loginout").click(function(){
        removeCookie("ユーザー名")
        $(".hLeft").空()
        $(".hLeft").html(` <a href="home.html" >Tmallホームページ</a>
        <a href="javascript:;" >ニャー、Tmall へようこそ</a>
        <a href="login.html" >ログインしてください</a>
        <a href="register-test.html" >無料登録</a>`)
    })
}それ以外{
    alert("まずログインしてください");
    場所を割り当てます("./login.html");
}

3.詳細ページからデータが送信されているかどうかを確認する

ここで私のデータはローカル ストレージに保存されます。保存場所に応じてデータを取得できます。コードは次のとおりです。

// 詳細ページからデータを受信します // まず、ローカル ストレージに製品があるかどうかを判断します var data = localStorage.getItem("cart");
if(!データ){
    $(".page-con").empty();
    var str = "";
    str +=`<h2>ショッピングカートは空です! ! ! </h2>
    <p>すぐにリストページに移動して製品を選択し、<p><a href="./list.html" >リストページに入ります</a>
    `
    $(".page-con").html(str);
    $(".page-con").css({幅:"900px",マージン:"40px 自動 0"});
    $(".page-con h2").css({fontSize:"50px",color:"blue",lineHeight:"80px"})
    $(".page-con p").css({fontSize:"20px",lineHeight:"26px"});
    $(".page-con a").css({幅:"100px",高さ:"40px",背景:"スカイブルー",上マージン:"20px",表示:"ブロック"})
}それ以外{
    // 次に、現在のユーザーのショッピング カートがデータであるかどうかを判断します // データを配列型に変換します data = JSON.parse(data);
    // データが存在するかどうかを確認します for(var j=0;j<data.length;j++){}
    var res = data.some(v=>{
        v.username == username を返します。
    })
    if(!res){
        $(".page-con").empty();
        var str = "";
        str +=`<h2>ショッピングカートは空です! ! ! </h2>
        <p>すぐにリストページに移動して製品を選択し、<p><a href="./list.html" >リストページに入ります</a>
        `
        $(".page-con").html(str);
        $(".page-con").css({width:"900px",margin:"40px auto 0"});
        $(".page-con h2").css({fontSize:"50px",color:"blue",lineHeight:"80px"})
        $(".page-con p").css({fontSize:"20px",lineHeight:"26px"});
        $(".page-con a").css({幅:"100px",高さ:"40px",背景:"スカイブルー",上マージン:"20px",表示:"ブロック"})
    }それ以外{
        // データがあり、そのデータには独自のデータがあります // まず独自のデータを見つけます var arr = data.filter(v=>v.username == username);
        // 取得したデータを走査します // 配列には目的の製品データがないため、データベースから取得し、ID でデータベース内のデータを検索する必要があります var ids = arr.map(v=>v.goodsid);
        
        ids = ids.join(",")

4. 詳細ページから送信されたデータをクエリする場合、送信されたIDを使用してデータベース内の必要なデータを見つけることができます。

製品情報を見つけるためにデータベースにAjaxを送信する

$.ajax({
            URL:"./server/cart.php",
            データ型:"json",
            データ:{ids:ids},
            タイプ:"取得",
            成功:res=>{
                var str = '';
                (var i=0;i<res.length;i++){
                    // res[i] の各項目に従って、arrvar number = arr.find(v=>v.goodsid==res[i].id).number から番号を検索します。
                    
                    str +=`
                        <div class="pageMtop">
                            <input type="checkbox" name="onetop"><i></i><span>ストア: ${res[i].name}</span><em></em>
                        </div>
                        <div class="pageMcontent">
                            <h3><img src="images/cat10.png">8.6 0時、300マイナス30毎</h3>
                            <ul>
                                <li>
                                    <input type="チェックボックス" name="one">
                                </li>
                                <li>
                                    <a href="#" >
                                        <img src="${res[i].imgpath}">
                                    </a>
                                </li>
                                <li>
                                    <p>
                                        <a href="#" >${res[i].introduce}</a>
                                    </p>
                                    <img src="images/cat03.png" alt="">
                                    <a href="javascript:;" ><img src="images/cat04.png" alt=""></a>
                                </li>
                                <li>
                                    <p>サイズ: M</p>
                                    <p>メインカラー:6685 ホワイト+6691 ヘイズブルー(Mサイズ先行発売は8月8日発売予定)</p>
                                    <a href="#" >編集</a>
                                </li>
                                <li>
                                    <span>${res[i].price}</span>
                                </li>
                                <li class="データ名" データID = "${res[i].id}">
                                <input type="button" class="reduce" value="-">
                                <input class="numberone" type="number" name="number" data-stock="${res[i].stock}" value="${number}">
                                <input type="button" class="add" value="+">
                                </li>
                                <li class="subtotal">
                                    ${res[i].価格*数値}
                                </li>
                                <li>
                                    <p>フォルダに移動</p>
                                    <p class="btn">削除</p>
                                    <p>赤ちゃん</p>
                                </li>
                            </ul>
                        </div>
                    `
                }
                $(".page-middle").html(str)
                 //ここにすべて選択関数を追加します //ここに記述すると、コードが深くネストされすぎてしまいます - 関数を外側に記述してから、ここで関数を呼び出します //すべて選択関数 selectAll() を呼び出します
                //単一選択関数selectone()を呼び出す
                // 合計価格と合計数量を計算する priceAndNumberAll()
                // 数量を加算および減算する addAndReduce()
                // 削除キーをクリックするremovebtn()
            }
        })
    }

ここでは、製品列のレイアウトとコンテンツのレンダリングを動的に読み込み、メインコンテンツが配置される大きなボックスに追加する必要があります。

5. ショッピングカートページの機能を実装する

機能コードが多数あるため、すべてを ajax に入れると冗長になります。各機能を関数にカプセル化し、ajax が完了したらコールバック関数で直接呼び出します。

6. すべて選択機能

コードは次のとおりです。

//すべて選択関数 function selectAll(){
    // 上部と下部の選択の両方にイベントをバインドします $("[name='topAll']")[0].onclick = $("[name='footAll']")[0].onclick = function(){
        // 単一選択の状態を設定します $("[name='one']").prop("checked",$(this).prop("checked"))
        $("[name='onetop']").prop("チェック済み",$(this).prop("チェック済み"))
        // 両方のチェックボックスにすべての選択を追加します $("[name='topAll']").prop("checked",$(this).prop("checked"))
        $("[name='footAll']").prop("チェック済み",$(this).prop("チェック済み"))
        価格と数値すべて()
    }
}

7. 単一選択機能

コードは次のとおりです。

// 単一選択関数 function selectone(){
    $("[name='one']").click(function(){
        // すべてがチェックされているかどうかを確認します //$("[name='one']") は疑似配列であるため、最初に配列メソッドを呼び出して配列に変換することはできません $("[name='onetop']").prop("checked",$(this).prop("checked"))
        var arr = Array.prototype.slice.call($("[name='one']"))
        // every メソッドを呼び出し、選択されていない場合は false を返します
        var res = arr.every(v=>$(v).prop("checked"));
        if(res){
            $("[name='topAll']").prop("チェック済み","チェック済み");
            $("[name='onetop']").prop("チェック済み","チェック済み");
            $("[name='footAll']").prop("チェック済み","チェック済み");
        }それ以外{
            $("[name='topAll']").prop("チェック済み",false);
            $("[name='footAll']").prop("チェック済み",false)
        }
        価格と数値すべて()
    })
}

8. 合計数量と合計金額を計算する

コードは次のとおりです。

// 合計価格と合計数量を計算する function priceAndNumberAll(){
    // 選択したボックスに基づいて計算する // 選択した数値を選択する
    var allNumInput = $("[name='one']:checked").parent().siblings(".data-name").find("[name='number']")
    var allNum = 0;
    allNumInput.each(関数(k,v){
        allNum += v.value-0;
    })
    $(".allnumber").text(allNum);
    var allPriceEle = $("[name=one]:checked").parent().siblings(".subtotal")
    var allPrice = 0;
    allPriceEle.each(function(k,v){
        allPrice += allPriceEle.text()-0;
    })
    $(".allprice").text(allPrice);
}

9. プラス ボタンとマイナス ボタンをクリックして、数量と金額を加算または減算します。

コードは次のとおりです。

// 加算と減算をクリックして数量を加算または減算します function addAndReduce(){
    // 追加ボタンをクリックします $(".add").click(function(){
        // まず入力ボックスの値を取得します var num = $(this).prev().val()-0;
        // クリックするたびに、入力の値は ++ になります
        数値++
        // ワイヤレスでデータを追加することはできません。最大値に達した場合は追加されません if (num>=$(this).prev().attr("data-stock")-0) {
            num=$(this).prev().attr("データストック")-0
            $(this).prop("無効",true);
            $(this).addClass("bgadd");
            $(this).prev().prev().prop("無効",false);
        }それ以外{
            $(this).prop("無効",false);
            $(this).prev().prev().removeClass("bgreduce");
        }
        $(this).prev().val(num)
        // 小計の価格を計算します // 単価のラベルと値を見つけます var price = $(this).parent().prev().find("span").text()-0;
        // 小計を再計算します var subtotal = price*num;
        // 小計を計算した後、それをストレージ td に格納します $(this).parent().next().text(subtotal);
        // ローカルストレージをリセットします // ローカルストレージデータを取得します var data = localStorage.getItem("cart");
        // 配列に変換 data = JSON.parse(data);
        // 配列を走査して、配列内の条件を満たすデータを検索します。 var obj = data.find(v=>v.username==username && v.goodsid==$(this).parent().attr("data-id"));
        obj.number = num;
        localStorage.setItem("cart",JSON.stringify(データ))
        価格と数値すべて()
    })
    $(".reduce").click(function(){
        // まず入力ボックスの値を取得します var num = $(this).next().val()-0;
        // クリックするたびに、入力の値は ++ になります
        番号 --
        // データはワイヤレスで追加できません。最大値に達した場合は追加されません if (num < 1) {
            数値=1;
            $(this).prop("無効",true);
            $(this).addClass("bgreduce");
            $(this).next().next().prop("無効",false)
        }それ以外{
            $(this).prop("無効",false);
            $(this).next().next().removeClass("bgadd");
        }
        $(this).next().val(数値)
        
        var price = $(this).parent().prev().find("span").text()-0;
        // 小計を再計算します var subtotal = price*num;
        // 小計を計算した後、それをストレージ td に格納します $(this).parent().next().text(subtotal);
        // データをローカルストレージに保存します var data = localStorage.getItem("cart");
        データ = JSON.parse(データ);
        // 要件を満たすデータを検索する var obj = data.find(v=>{
            v.username==username&&v.goodsid==$(this).parent().attr("data-id"); を返します。
        })
        obj.number = num;
        localStorage.setItem("cart",JSON.stringify(data));
        価格と数値すべて()
    })
}

10.削除ボタン機能をクリックする

コードは次のとおりです。

//クリックして削除する関数 function removebtn(){
    // クリックイベント $(".btn").click(function(){
        // 削除するかどうかを尋ねる if(!confirm("本当に削除しますか")){
            false を返します。
        }
        // ローカルに保存されたデータを削除します var data = localStorage.getItem("cart");
        データ = JSON.parse(データ);
        var インデックス = data.findIndex(function(v){
            v.username==ユーザー名&&v.goodsid==$(this).parent().siblings(".data-name").attr("data-id")
        });
        data.splice(インデックス,1);
        localStorage.setItem("cart",JSON.stringify(データ))
        var tr = $(this).parent().parent();
        tr.削除()
        if(!data.filter(v=>v.username==username).length){
            // データがない場合、テーブルは表示されません $(".page-middle").empty();
            // ページにカスタムコンテンツを表示させます var str = "";
            str += `<h2>ショッピングカートは空です! ! ! </h2>
        <p>すぐにリストページに移動して製品を選択し、<p><a href="./list.html" >リストページに入ります</a>
        `
        $(".page-middle").html(str);
        $(".page-middle").css({width:"1200px",margin:"40px auto 0"});
        $(".page-middle h2").css({fontSize:"50px",lineHeight:"80px",color:"blue"})
        }

    })
}

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

以下もご興味があるかもしれません:
  • Vuejsは、完全なショッピングカートのサンプルコードを書く方法を段階的に教えてくれます
  • js ショッピング カートの実装のアイデアとコード (個人的には良い感じ)
  • JavaScript で簡単なショッピングカート機能を書く
  • ショッピングカート機能を実装するためのJavascriptの詳細なコード
  • jsは画像とコードを使ったシンプルなショッピングカートを実装します
  • ショッピングカート機能を実現するJsp+Servlet
  • Javascript は Cookie を操作してショッピングカート プログラムを実装します
  • シンプルなフロントエンド js+ajax ショッピング カート フレームワーク (初心者向けガイド)
  • ネイティブ js シミュレーション Taobao ショッピング カート プロジェクト実践
  • ショッピングカートの追加と削除の効果を実現する js

<<:  Dockerfile に基づいて Tomcat イメージを構築する方法

>>:  MySQLのパラメータについてお話しましょう

推薦する

Linux で MySQL 8.0 サービスを完全に削除する方法

この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...

HTML テーブルタグチュートリアル (35): 列間属性 COLSPAN

複雑なテーブル構造では、一部のセルが垂直方向に複数のセルにまたがるため、列間属性 COLSPAN を...

div を下から上にスライドさせる CSS3 の例

1. まず、CSS3 のターゲット セレクターを使用し、a タグを使用して id セレクターを指定し...

Tomcat が非同期サーブレットを実装する方法の詳細な説明

序文これまでの Tomcat シリーズの記事を通じて、私のブログを読んでいる学生は Tomcat に...

Linux で静的ルーティングを追加するための 2 つの実装方法の分析

ルートを追加するコマンド: 1.ルート追加route add -net 192.56.76.0 ne...

MySQL MGR の利点は何ですか?

MGR (MySQL グループ レプリケーション) は、バージョン 5.7 で追加された新しい機能...

HTMLで細い線のテーブルを作成する簡単な例

この細線の表を作成する方法については、Baidu で検索すると、表に対して border="...

Three.js が Facebook Metaverse 3D ダイナミック ロゴ効果を実現

目次背景メタバースとは何ですか?成果を達成するトライアル 1: THREE.TorusGeometr...

CSS3 で実装された価格表

結果: 実装コードhtml <div id="価格表" class=&qu...

Windows で Mysql を起動したときに 1067 が表示される場合の解決策

数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...

docker で Apollo をデプロイする詳細なチュートリアル

1. はじめにここでは apollo について詳しく説明しません。公式サイト https://git...

MySQL で複数のテーブルにビューを作成する方法

MySQLでは、2つ以上のベーステーブルにビューを作成します。学生テーブルとstu_infoテーブル...

Linux で MySQL スケジュール タスク バックアップ データを実装する方法

序文バックアップは災害復旧の基礎であり、システム操作エラーやシステム障害によるデータ損失を防ぐために...

vue+node+socket ioは複数人のインタラクションを実現し、プロセス全体を解放します

1. 背景1. フロントエンドはvue + vuex + socket.io-clientを使用しま...

MAC での MYSQL5.7.17 接続失敗の問題と解決策

MYSQL5.7.17 が MAC で接続できない問題。SQLBench_community 6.3...