ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript を使用してタオバオのようなショッピング カート効果を実装するコード共有の例

JavaScript を使用してタオバオのようなショッピング カート効果を実装するコード共有の例

黄舟
黄舟オリジナル
2017-03-17 15:03:391946ブラウズ

この記事では、ショッピングカートの特殊効果を実装するためのJavaScriptに関する関連情報を中心に、JavaScriptを使用して商品の単一選択、全選択、削除、変更などの機能を実装する方法をサンプルコードを通して詳しく紹介します。淘宝網のショッピングカートは必須です。友達はそれを参照できます。以下を見てみましょう。

はじめに

皆さんは、あるウェブサイトで商品を購入するとき、最後に気に入った商品をショッピングカートに追加する機能をよく知っていると思います。ショッピング カート機能を使用すると、消費者は商品の追加、削除、ショッピング カート内の 1 つまたは複数の商品の選択を行うことができ、最終的な商品の合計価格も消費者の操作に応じて変化します。この記事では、Javascript を使用して、商品の単一選択、全選択、削除、数量変更、価格計算、数量計算、プレビューなどの機能を含む、淘宝網と同様のショッピング カート効果を実現する方法を紹介します。

機能は以下の通りです

1. IEの下位バージョンと互換性のあるgetElementsByClassName()メソッドを実装しますgetElementsByClassName()方法

      2. JS表格操作

      3. 通过parseInt()parseFloat()字符串转换成数字

      4. 通过toFixed()把数字格式化成指定位数的小数

      5. 事件代理的运用

效果图:

JavaScript を使用してタオバオのようなショッピング カート効果を実装するコード共有の例

border-collapse有两个值可以选择,分别是collapse和separate,就是合并边框和分离边框,分离边框之下又可以设置间距和边框样式

border-spacing:2em 4em;(设置右间距和下间距)

border-style:none solid dashed dotted;(分别设置上右下左的样式)

html结构:

<table id="cartTable">
 <thead>
 <tr>
 <th><label><input class="check-all check" type="checkbox"/> 全选</label></th>
 <th>商品</th>
 <th>单价</th>
 <th>数量</th>
 <th>小计</th>
 <th>操作</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
 <td class="goods"><img src="images/1.jpg" alt="" /><span>Casio/卡西欧 EX-TR350</span></td>
 <td class="price">5999.88</td>
 <td class="count"><span class="reduce"></span><input class="count-input" type="text" value="1"/>
 <span class="add">+</span></td>
 <td class="subtotal">5999.88</td>
 <td class="operation"><span class="delete">删除</span></td>
 </tr>
 <tr>
 <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
 <td class="goods"><img src="images/2.jpg" alt="" /><span>Canon/佳能 PowerShot SX50 HS</span></td>
 <td class="price">3888.50</td>
 <td class="count"><span class="reduce"></span><input class="count-input" type="text" value="1"/>
 <span class="add">+</span></td>
 <td class="subtotal">3888.50</td>
 <td class="operation"><span class="delete">删除</span></td>
 </tr>
 <tr>
 <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
 <td class="goods"><img src="images/3.jpg" alt="" /><span>Sony/索尼 DSC-WX300</span></td>
 <td class="price">1428.50</td>
 <td class="count"><span class="reduce"></span><input class="count-input" type="text" value="1"/>
 <span class="add">+</span></td>
 <td class="subtotal">1428.50</td>
 <td class="operation"><span class="delete">删除</span></td>
 </tr>
 <tr>
 <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
 <td class="goods"><img src="images/4.jpg" alt="" /><span>Fujifilm/富士 instax mini 25</span></td>
 <td class="price">640.60</td>
 <td class="count"><span class="reduce"></span><input class="count-input" type="text" value="1"/>
 <span class="add">+</span></td>
 <td class="subtotal">640.60</td>
 <td class="operation"><span class="delete">删除</span></td>
 </tr>
 </tbody>
</table>
<p class="foot" id="foot">
 <label class=" fl select-all"><input type="checkbox" class="check-all check" /> 全选</label>
 <a class="fl delete" id="deleteAll" href="javascript:;" rel="external nofollow" >删除</a>
 <p class="fr closing">结 算</p>
 <p class="fr total">合计:¥<span id="priceTotal">0.00</span></p>
 <p class="fr select" id="selected">已选商品<span id="selectedTotal">0</span>件<span class="arrow up">︽</span><span class="arrow down">︾</span></p>
 <p class="selected-view">
 <p id="selectedViewList" class="clearfix">
 <p><img src="images/1.jpg"><span>取消选择</span></p>
 </p>
 <span class="arrow">◆<span>◆</span></span>
 </p>
</p>

css代码:

*{
 margin: 0;
 padding: 0;
 }
 a{
 color: #666;
 text-decoration: none;
 }
 body{
 padding:20px;
 color: #666;
 }
 .fl{
 float: left;
 }
 .fr{
 float: right;
 }
 table{
 border-collapse: collapse;
 border-spacing: 0;
 border: 0;
 text-align: center;
 width: 937px;
 }
 th,td{
 border: 1px solid #cadeff;
 }
 th{
 background: #e2f2ff;
 border-top: 3px solid #a7cbff;
 height: 30px;
 }
 td{
 padding: 10px;
 color: #444;
 }
 tbody tr:hover{
 background: RGB(238,246,255);
 }
 .checkbox{width: 60px;}
 .goods{width: 300px;}
 .goods span{
 width: 180px;
 margin-top: 20px;
 text-align: left;
 float: left;
 }
 .price{width: 130px;}
 .count{width: 90px;}
 .count .add, .count input, .count .reduce{
 float: left;
 margin-left: -1px;
 position: relative;
 z-index: 0;
 }
 .count .add, .count .reduce{
 height: 23px;
 width: 17px;
 border: 1px solid #e5e5e5;
 background: #f0f0f0;
 text-align: center;
 line-height: 23px;
 color: #444;
 }
 .count .add:hover, .count .reduce:hover{
 color: #f50;
 z-index: 3;
 border-color: #f60;
 cursor: pointer;
 }
 .count input{
 width: 50px;
 height: 15px;
 line-height: 15px;
 border: 1px solid #aaa;
 color: #343434;
 text-align: center;
 padding: 4px 0;
 background-color: #fff;
 z-index: 2;
 }
 .subtotal{
 width: 150px;
 color: red;
 font-weight: bold;
 }
 .operation{width: 80px;}
 .operation span:hover, .a:hover{
 cursor: pointer;
 color: red;
 text-decoration: underline;
 }
 img{
 width: 100px;
 height: 80px;
 margin-right: 10px;
 float: left;
 }
 .foot{
 width: 935px;
 margin-top: 10px;
 color: #666;
 height: 48px;
 border: 1px solid #c8c8c8;
 background-image: linear-gradient(RGB(241,241,241),RGB(226,226,226));
 position: relative;
 z-index: 8;
 }
 .foot p, .foot a{
 line-height: 48px;
 height: 48px;
 }
 .foot .select-all{
 width: 100px;
 height: 48px;
 line-height: 48px;
 padding-left: 5px;
 color: #666;
 }
 .foot .closing{
 border-left: 1px solid #c8c8c8;
 width: 100px;
 text-align: center;
 color: #000;
 font-weight: bold;
 background: RGB(238,238,238);
 cursor: pointer;
 }
 .foot .total{
 margin: 0 20px;
 cursor: pointer;
 }
 .foot #priceTotal, .foot #selectedTotal{
 color: red;
 font-family: "微软雅黑";
 font-weight: bold;
 }
 .foot .select{
 cursor: pointer;
 }
 .foot .select .arrow{
 position: relative;
 top: -3px;
 margin-left: 3px;
 }
 .foot .select .down{
 position: relative;
 top: 3px;
 display: none;
 }
 .show .select .down{
 display: inline;
 }
 .show .select .up{
 display: none;
 }
 .foot .select:hover .arrow{
 color: red;
 }
 .foot .selected-view{
 width: 935px;
 border: 1px solid #c8c8c8;
 position: absolute;
 height: auto;
 background: #fff;
 z-index: 9;
 bottom: 48px;
 left: -1px;
 display: none;
 }
 .show .selected-view{display: block;}
 .foot .selected-view p{height: auto;}
 .foot .selected-view .arrow{
 font-size: 16px;
 line-height: 100%;
 color: #c8c8c8;
 position: absolute;
 right: 330px;
 bottom: -9px;
 }
 .foot .selected-view .arrow span{
 color: #fff;
 position: absolute;
 left: 0;
 bottom: 1px;
 }
 #selectedViewList{
 padding: 20px;
 margin-bottom: -20px;
 }
 #selectedViewList p{
 display: inline-block;
 position: relative;
 width: 100px;
 height: 80px;
 border: 1px solid #ccc;
 margin: 10px;
 }
 #selectedViewList p span{
 display: none;
 color: #fff;
 font-size: 12px;
 position: absolute;
 top: 0;
 right: 0;
 width: 60px;
 height: 18px;
 line-height: 18px;
 text-align: center;
 background: RGBA(0,0,0,.5);
 cursor: pointer;
 }
 #selectedViewList p:hover span{
 display: block;
 }

js部分:

1)实现商品的全选功能及数量和价格的计算

var cartTable = document.getElementById(&#39;cartTable&#39;);
 var tr = cartTable.children[1].rows;//获取table下的tbody下的每一行
 var checkInputs = document.getElementsByClassName(&#39;check&#39;);
 var checkAllInputs = document.getElementsByClassName(&#39;check-all&#39;);
 var selectedTotal = document.getElementById(&#39;selectedTotal&#39;);
 var priceTotal = document.getElementById(&#39;priceTotal&#39;);
 //计算总数和价格
 function getTotal(){
 var selected = 0;
 var price = 0;
 for(var i=0;i < tr.length; i++){
 if(tr[i].getElementsByTagName(&#39;input&#39;)[0].checked){
  selected += parseInt(tr[i].getElementsByTagName(&#39;input&#39;)[1].value);
  price += parseFloat(tr[i].cells[4].innerHTML);//cells属性为获得tr下面的td
 }
 }
 selectedTotal.innerHTML = selected;
 priceTotal.innerHTML = price.toFixed(2);//保留两位小数
 }
 for(var i=0;i<checkInputs.length;i++){
 checkInputs[i].onclick = function(){
 if(this.className === &#39;check-all check&#39;){//如果点击的是全选按钮,则使所有按钮的状态和它相同
  for(var j=0;j<checkInputs.length;j++){
  checkInputs[j].checked = this.checked;
  }
 }
 if(this.checked == false){//如果其中一个变为未选中状态,则使全选按钮取消选中
  for(var i=0;i<checkAllInputs.length;i++){
  checkAllInputs[i].checked = false;
  }
 }
 getTotal();
 }
 }

2)点击已选商品实现商品预览浮层的功能

点击已选商品时会显示出已选择商品的列表

同时在getTotal() 2. JSテーブル操作

3. parseInt()parseFloat() を通じて 文字列

を数値

に変換する 4. toFixed() を使用して数値を 10 進数にフォーマットします指定した数字で

5. イベント

agent

レンダリングの使用:

JavaScript を使用してタオバオのようなショッピング カート効果を実装するコード共有の例

border-collapse 2 つの値があります。結合された境界線と分割さ​​れた境界線である分離から選択できます。分割された境界線の下で、間隔と境界線のスタイルを設定できます。

border-spacing: 2em 4em;および下部の間隔)
/>
border-style:none 実線、破線、点線(上、右、下、左のスタイルをそれぞれ設定します)

html 構造:

function getTotal(){
 var selected = 0;
 var price = 0;
 var HTMLstr = &#39;&#39;;
 for(var i=0;i < tr.length; i++){
 if(tr[i].getElementsByTagName(&#39;input&#39;)[0].checked){
  tr[i].className = &#39;on&#39;;
  selected += parseInt(tr[i].getElementsByTagName(&#39;input&#39;)[1].value);
  price += parseFloat(tr[i].cells[4].innerHTML);//cells属性为获得tr下面的td
  HTMLstr += &#39;<p><img src="&#39;+ tr[i].getElementsByTagName(&#39;img&#39;)[0].src + &#39;"><span>取消选择</span></p>&#39;;
 }
 else{
  tr[i].className = &#39;&#39;;
 }
 }
 selectedTotal.innerHTML = selected;
 priceTotal.innerHTML = price.toFixed(2);//保留两位小数
 selectedViewList.innerHTML = HTMLstr;
 if(selected == 0){
 foot.className = &#39;foot&#39;;
 }
 }
 for(var i=0;i<checkInputs.length;i++){
 checkInputs[i].onclick = function(){
 if(this.className === &#39;check-all check&#39;){//如果点击的是全选按钮,则使所有按钮的状态和它相同
  for(var j=0;j<checkInputs.length;j++){
  checkInputs[j].checked = this.checked;
  }
 }
 if(this.checked == false){//如果其中一个变为未选中状态,则使全选按钮取消选中
  for(var i=0;i<checkAllInputs.length;i++){
  checkAllInputs[i].checked = false;
  }
 }
 getTotal();
 }
 }

 selected.onclick = function(){
 if(foot.className == &#39;foot&#39;){
 if(selectedTotal.innerHTML != 0){
  foot.className = &#39;foot show&#39;;
 }
 }else{
 foot.className = &#39;foot&#39;;
 }
 }

🎜🎜 cssコード: 🎜🎜🎜
selectedViewList.onclick = function(e){
  var el = e.srcElement;
  if(el.className == &#39;del&#39;){
  var index = el.getAttribute(&#39;index&#39;);
  var input = tr[index].getElementsByTagName(&#39;input&#39;)[0];
  input.checked = false;
  input.onclick();
  }
 }
🎜🎜🎜 js部分: 🎜🎜🎜🎜🎜1) すべての商品を選択し、数量と価格を計算する機能を実現します🎜🎜
//增减商品数量事件代理
 for(var i=0;i<tr.length;i++){
  tr[i].onclick = function(e){
  e = e|| window.event;
  var el = e.srcElement;
  var cls = el.className;
  var input = this.getElementsByTagName(&#39;input&#39;)[1];
  var val = parseInt(input.value);
  var reduce = this.getElementsByTagName(&#39;span&#39;)[1];
  switch (cls){
   case &#39;add&#39;:
   input.value = val + 1;
   reduce.innerHTML = &#39;-&#39;;
    getsubTotal(this);
   break;
   case &#39;reduce&#39;:
   if(val > 1){
    input.value = val - 1;
    getsubTotal(this);
   }else{
    reduce.innerHTML = &#39;&#39;;
   }
  }
  getTotal();
  }
  tr[i].getElementsByTagName(&#39;input&#39;)[1].onkeyup = function(){
  var val = parseInt(this.value);
  var tr = this.parentNode.parentNode;//this指的是当前的input,其父节点的父节点就是当前的tr
  var reduce = tr.getElementsByTagName(&#39;span&#39;)[1];
  if(isNaN(val) || val < 1){
   val = 1;
  }
  this.value = val;//保证输入框中都是大于1的纯数字
  if(val <= 1){
   reduce.innerHTML = &#39;&#39;;
  }
  else{
   reduce.innerHTML = &#39;-&#39;;
  }
  getsubTotal(tr);
  getTotal();
  }
 }
🎜🎜2) 選択した商品をクリックして商品の機能を実現しますプレビューオーバーレイ🎜🎜🎜選択した商品をクリックすると、選択した商品の一覧が表示されます🎜🎜同時に、新しく作成したp🎜🎜jsコードをgetTotal()に追加します>🎜関数🎜: 🎜
//删除商品
 deleteAll.onclick = function(){
  if(selectedTotal.innerHTML != &#39;0&#39;){
  var conf = confirm("确定要删除所选商品吗");
  if(conf){
   for(var i=0;i<tr.length;i++){
   var input = tr[i].getElementsByTagName(&#39;input&#39;)[0];
   if(input.checked){
    tr[i].parentNode.removeChild(tr[i]);
    i --;//因为删除数组中的一个后,后面的索引就会向前移,此时要让i也向前移一个,回置下标i
   }
   }
   getTotal();
  }
  }
 }
🎜🎜 3) プロダクトリストの選択とイベントプロキシをキャンセル🎜🎜🎜 選択されたプロダクトリストにappendChildがない場合、pもspanも存在しないため、イベントプロキシを使用する必要があります。 🎜rrreee🎜🎜4) 商品数量の増減と小計価格の計算を実現🎜🎜rrreee🎜🎜 5) 商品を削除する機能を実現🎜🎜🎜🎜配列内の一部のデータを削除する場合の🎜forループ🎜の使い方を学ぶ🎜、i のマークを付けてリセットする必要があります。 🎜えー🎜🎜🎜概要🎜🎜🎜

以上がJavaScript を使用してタオバオのようなショッピング カート効果を実装するコード共有の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。