原生js实现购物车


Posted in Javascript onSeptember 23, 2020

原生就js实现购物车增删改查,供大家参考,具体内容如下

效果图:

原生js实现购物车

代码:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title></title>
 <style type="text/css">
  *{
  margin:0;padding:0;
  }
  .fl{
  float: left;
  }
  .fr{
  float: right;
  }
  .clearfix{
  clear: both;
  zoom: 1;
  }
  .shopping{
  width: 1200px;
  margin: 0 auto;
  font-size: 14px;
  }
  .shopping .header{
  width: 100%;
  height: 50px;
  line-height: 50px;
  background: #ccc;
  color: #000000;
  font-weight: bold;
  text-align: left;
  }
  .shopping .header ul{
  padding-left: 30px;
  }
  .shopping .header ul li{
  width: 190px;
  list-style: none;
  }
  .shopping .footer{
  width: 100%;
  height: 50px;
  background: #ccc;
  color: #000000;
  text-align: left;
  }
  .shopping .footer .footlf{
  width: 200px;
  line-height: 50px;
  margin-left: 30px;
  }
  .shopping .footer .footrg{
  width: 600px;
  text-align:right;
  
  }
  .shopping .footer .footrg span:nth-child(1){
  display: inline-block;
  padding: 0px 25px;
  background: black;
  color: white;
  line-height: 48px;
  margin-right: 20px;
  }
  .shopping .footer .footrg span:nth-child(2),.shopping .footer .footrg span:nth-child(3){
  display: inline-block;
  margin-right: 20px;
  }
  .shopping .footer .footrg span:nth-child(4){
  font-size:16px;
  font-weight: bold;
  line-height: 50px;
  margin-right: 50px;
  }
  .shopping .footer .footrg s{
  color: red;
  }
  .content{
  margin: 10px 0px;
  }
  .content dl{
  margin-bottom: 20px;
  }
  .content dl dt{
  border: 1px solid #CCCCCC;
  height: 30px;
  line-height: 30px;
  font-weight: bold;
  }
  .content dl dt{
  padding-left: 20px;
  }
  .content dl dd{
  padding-left: 20px;
  border: 1px solid #CCCCCC;
  height: 100px;
  line-height: 100px;
  border-top: none;
  }
  .content dl dd ul li{
  list-style: none;
  }
  .content dl dd ul li img{
  width: 80px;
  height: 80px;
  vertical-align: middle;
  }
  .content dl dd ul li{
  width: 190px;
  }
  .content dl dd ul li s{
  color: red;
  font-weight: bold;
  }
  .content dl dd ul li input{
  width: 30px;
  }
  s{
  text-decoration: none;
  }
  .content .del{
  cursor: pointer;
  }
  .minus{
  padding: 0px 10px;
  background: red;
  cursor: pointer;
  }
  .plus{
  padding: 0px 10px;
  background: red;
  cursor: pointer;
  }
  input{
  cursor: pointer;
  }

 </style>
 </head>
 <body>
  <div class="shopping">
  <div class="header clearfix">
   <ul>
   <li class="fl"><input type="checkbox" name="" class="all">全选</li>
   <li class="fl">商品</li>
   <li class="fl">单价</li>
   <li class="fl">数量</li>
   <li class="fl">价格</li>
   <li class="fl">操作</li>
    </ul>
  </div>
  <div class="content">
   <dl>
   <dt>店铺:xxx快餐店1</dt>
   <dd>
    <ul>
    <li class="fl"><input type="checkbox" name="" class="ischeck"></li>
    <li class="fl">
     <img src="imges/01.jpg" />
     <span>凉茶</span>
    </li>
    <li class="fl">
     <s>$<span class="price">100</span></s>
    </li>
    <li class="fl">
     <span class="minus">-</span>
     <input type="text" name="" class="count" value="1">
     <span class="plus">+</span>
    </li>
    <li class="fl">
     <s>$<span class="price_sum">100</span></s>
    </li>
    <li class="fl">
     <span class="del">删除</span>
    </li>
    </ul>
   </dd>
   </dl>
   <dl>
   <dt>店铺:xxx快餐店2</dt>
   <dd>
    <ul>
    <li class="fl"><input type="checkbox" name="" class="ischeck"></li>
    <li class="fl">
     <img src="imges/02.jpg" />
     <span>凉茶2</span>
    </li>
    <li class="fl">
     <s>$<span class="price">200</span></s>
    </li>
    <li class="fl">
     <span class="minus">-</span>
     <input type="text" name="" class="count" value="1">
     <span class="plus">+</span>
    </li>
    <li class="fl">
     <s>$<span class="price_sum">200</span></s>
    </li>
    <li class="fl">
     <span class="del">删除</span>
    </li>
    </ul>
   </dd>
   </dl>
   <dl>
   <dt>店铺:xxx快餐店3</dt>
   <dd>
    <ul>
    <li class="fl"><input type="checkbox" name="" class="ischeck"></li>
    <li class="fl">
     <img src="imges/02.jpg" />
     <span>凉茶3</span>
    </li>
    <li class="fl">
     <s>$<span class="price">300</span></s>
    </li>
    <li class="fl">
     <span class="minus">-</span>
     <input type="text" name="" class="count" value="1" >
     <span class="plus">+</span>
    </li>
    <li class="fl">
     <s>$<span class="price_sum">300</span></s>
    </li>
    <li class="fl">
     <span class="del">删除</span>
    </li>
    </ul>
   </dd>
   </dl>
  </div>
  <div class="footer clearfix">
   <div class="footlf fl">
   <input type="checkbox" name="" class="all_is">反选
   <input type="checkbox" name="" id="cancel">取消
   </div>
   <div class="footrg fr">
   <span>继续购物</span>
   <span>已选商品<s id="piece">0</s>件</span>
   <span>合计(不含运费):¥<s class="sum_">0.00</s></span>
   <span>结算</span>
   </div>
  </div>
  </div>
 
 </body>
 <script type="text/javascript">
 //购物车功能要求
 //1.勾选全选框 商品勾选状态为已勾选状态 并且计算商品合计 单价合计
 //2.取消勾选时取消所以商品勾选
 var del=document.getElementsByClassName("del");//删除
 var dl=document.getElementsByTagName("dl");
 var all=document.getElementsByClassName("all")[0];//获取全选按钮
 var all_is=document.getElementsByClassName("all_is")[0];//获取取反按钮
 var ischeck=document.getElementsByClassName("ischeck");//获取商品勾选状态复选框节点
 var minus=document.getElementsByClassName("minus");//商品减
 var plus=document.getElementsByClassName("plus");//商品加
 var count=document.getElementsByClassName("count");//商品数量
 var price=document.getElementsByClassName("price");//获得单价
 var price_sum=document.getElementsByClassName("price_sum");//获得商品价格
 var sum_=document.getElementsByClassName("sum_")[0];//获得商品总价格
 var piece=document.getElementById("piece");//已选商品件数
 var cancel=document.getElementById("cancel");//取消选择
 
 //全选功能
 all_();
 function all_(){
  all.onchange=function(){
  //当全选框状态为ture 的时候循环勾选 商品状态  为false 则相反
  if(all.checked){
   for(var i=0;i<ischeck.length;i++)
   {
   ischeck[i].checked=true;
   }
   piece_();//已选商品件数
  }
  else{
   for(var i=0;i<ischeck.length;i++)
   {
   ischeck[i].checked=false;
   }
   piece_();//已选商品件数
  }
  shss();//每次商品勾选或者数量发生改变计算总额数
  }
 }
 //商品状态勾选 
 comm_ischeck();
 function comm_ischeck(){
  for (var i=0;i<ischeck.length;i++) {
  (function(j){
   ischeck[j].onclick=function(){
   shss();//每次商品勾选或者数量发生改变计算总额数
   piece_();//每次商品勾选状态发生变化计算已选商品件数
 
   for (var k=0;j<ischeck.length;k++) {//循环判断商品勾选状态
    if (!ischeck[k].checked) {//如果有一个为flase 则全选框取消勾选
    all.checked = false;
     break; //结束循环
    }
    //否则勾选
    all.checked =true;
   } 
   }
  })(i)
  }
 }
 //反选
 all_iss();
 function all_iss(){
  all_is.onchange=function(){ 
  //循环遍历勾选状态 商品状态勾选则取消勾选
  for(var i=0;i<ischeck.length;i++){
   ischeck[i].checked = ischeck[i].checked?false:true;
  }
  shss();//每次商品勾选或者数量发生改变计算总额数
  piece_();//每次商品勾选状态发生变化计算已选商品件数
  }
 }
 //减少商品
 add_is();
 function add_is(){
  for(var i=0;i<minus.length;i++){
  (function(i){
   minus[i].onclick=function(){
   if(parseInt(count[i].value)<2){
    count[i].value=1;
   }
   else{
    count[i].value=parseInt(count[i].value)-1;
   }
   // parseInt(count[i].value) 因为得到的value 是string 类型 运算需要进行类型转换
   //如果数量值<1默认为0
   //count[i].value=parseInt(count[i].value)<1?0:(parseInt(count[i].value)-1);
   
   var pric=price[i].innerHTML;//商品单价
   price_sum[i].innerHTML=parseInt(pric)*parseInt(count[i].value);//商品总结价格等于=商品单价*商品数量
 
   shss();//每次商品勾选或者数量发生改变计算总额数
   piece_();//每次商品勾选状态发生变化计算已选商品件数
   }
  })(i)
  }
 }
 //添加商品
 add();
 function add(){
  for(var i=0;i<plus.length;i++){
  //立即执行函数得到下标
  (function(i){
   plus[i].onclick=function(){
   var pric=price[i].innerHTML;//商品单价
   //因为得到的value 是string 类型 运算需要进行类型转换
   count[i].value=parseInt(count[i].value)+1;//改变数量值
   price_sum[i].innerHTML=parseInt(pric)*parseInt(count[i].value);//商品总结价格等于=商品单价*商品数量
   shss();//每次商品勾选或者数量发生改变计算总额数
   piece_();//每次商品勾选状态发生变化计算已选商品件数
   }
  })(i)
  }
 }
 //count
 count_();
 function count_(){
  for(var i=0;i<count.length;i++){
  (function(i){
   count[i].onchange=function(){
   var pric=price[i].innerHTML;//商品单价
   //因为得到的value 是string 类型 运算需要进行类型转换
   count[i].value=parseInt(count[i].value)+1;//改变数量值
   price_sum[i].innerHTML=parseInt(pric)*parseInt(count[i].value);//商品总结价格等于=商品单价*商品数量
   shss();//每次商品勾选或者数量发生改变计算总额数
   piece_();//每次商品勾选状态发生变化计算已选商品件数
   }
  })(i)
  }
 }
 
 //计算已选商品件数
 piece_();
 function piece_(){
  piece.innerHTML=0;
  for(var i=0;i<ischeck.length;i++){
  if(ischeck[i].checked){
   piece.innerHTML=parseInt(piece.innerHTML)+parseInt(count[i].value);
  }
  }
 }
 
 //计算商品总额
 shss();
 function shss(){
  sum_.innerHTML=0;
  for(var i=0;i<ischeck.length;i++){
  if(ischeck[i].checked){
   console.log(sum_.innerHTM);
   sum_.innerHTML=parseInt(sum_.innerHTML)+parseInt(price_sum[i].innerHTML);
  }
  }
 }
 
 //取消选择
 cancel_();
 function cancel_(){
  //取消按钮点击事件
  cancel.onclick=function(){
  for(var i=0;i<ischeck.length;i++){
   ischeck[i].checked=false;
  }
  shss();
  piece_();
  }
 }
 //删除
 del_();
 function del_(){
  for(var i=0;i<del.length;i++){
  (function(i){
   del[i].onclick=function(){
   dl[i].parentNode.removeChild(dl[i]);
   shss();//每次商品勾选或者数量发生改变计算总额数
   piece_();//每次商品勾选状态发生变化计算已选商品件数
   }
  })(i)
  }
 }

 </script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于Jquery的标签智能验证实现代码
Dec 27 Javascript
js正则表达式验证邮件地址
Nov 12 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
Jan 08 Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 Javascript
BootStrap入门教程(三)之响应式原理
Sep 19 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
移动端基础事件总结与应用
Jan 12 Javascript
jquery.flot.js简单绘制折线图用法示例
Mar 13 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
Nov 15 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
使用vue打包进行云服务器上传的问题
Mar 02 Javascript
javascript实现简易计算器功能
Sep 23 #Javascript
javascript使用正则表达式实现注册登入校验
Sep 23 #Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 #Javascript
Vue3为什么这么快
Sep 23 #Javascript
Angular短信模板校验代码
Sep 23 #Javascript
JavaScript实现单点登录的示例
Sep 23 #Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 #Javascript
You might like
VOLVO车载收音机
2021/03/02 无线电
杏林同学录(八)
2006/10/09 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
popdiv
2006/07/14 Javascript
javascript整除实现代码
2010/11/23 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Python获取时间戳代码实例
2019/09/24 Python
Python面向对象编程基础实例分析
2020/01/17 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
英文自我鉴定
2013/12/10 职场文书
生日赠语
2015/06/23 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript