HTML+CSS+JavaScript仿写京东购物车附代码

前言:

兄弟们,我来更新了。之前不是写了一篇文章是关于这个HTML+CSS仿写京东购物车静态页面附代码(web前端期末大作业)的,那个当时还没有学习js就只是写了一个静态页面。今天把js加上了,可以进行一些操作可以看见一些效果了。比如:全选,数量加减,计算价格,删除等等。就是表现的比之前那个纯静态页面优秀了一点,当然了也是刚学还是比较垃圾的一个页面(水平有限请见谅,希望可以蒙混过关)仅供学习参考。

京东购物车页面(官方的效果)

仿造的效果

加入js后可以实现的一些逻辑和操作效果

正文

好了我们废话不多说我们开整,以下是代码部分

HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <link rel="stylesheet" type="text/css" href="css/reset.css"/>
    <link rel="stylesheet" type="text/css" href="css/jd.css"/>
    <link rel="stylesheet" type="text/css" href="icon/iconfont.css"/>

    <script type="text/javascript" src="js/jd.js"></script>
</head>
<body>
  <!--导航开始-->
    <div class="nav">

        <div class="warp">
            <ul class="nav_ul1">
                <li><a href=""><i class="iconfont">&#xf012b;</i> 京东首页</a></li>
                <li><a href="">配送到:北京</a></li>
            </ul>

            <ul class="nav_ul2">
                <li><a href="">洋洋宝贝</a><span>|</span></li>
                <li><a href="">我的订单</a><span>|</span></li>
                <li><a href="">我的京东</a><span>|</span></li>
                <li><a href="">京东会员</a><span>|</span></li>
                <li><a href="">企业采购</a><span>|</span></li>
                <li><a href="">京东手机</a><span>|</span></li>
                <li><a href="">关注京东</a><span>|</span></li>
                <li><a href="">客户服务</a><span>|</span></li>
                <li><a href="">网站导航</a></li>
            </ul>
        </div>

    </div>
  <!-- 导航结束   -->

  <!--搜索框开始-->
    <div class="search">

        <div class="warp">
            <img src="img/jdlogo.png"/>
            <ul class="search_1">
                <li><a href="">购物车</a></li>
            </ul>

            <div class="search_div">

                <input type="text" class="search_text"/>
                <input type="button" value="搜索" class="search_but"/>
            </div>
        </div>

    </div>
  <!--搜索框结束-->

  <!--标题开始-->
  <div class="title warp">
      <h3>全部商品</h3>

      <div>
          <span>配送到</span>

          <select>
              <option>昌平区</option>
              <option>顺义区</option>
              <option>大兴区</option>
              <option>朝阳区</option>
              <option>海淀区</option>
              <option>石景山区</option>
              <option>东城区</option>
              <option>房山区</option>
              <option>通州区</option>
              <option>丰台区</option>
          </select>

      </div>

  </div>
  <!--标题结束-->

    <!--显示菜单的开始-->
    <div class="tips warp">
        <ul>
            <li>
                <input type="checkbox" name="fav" id="all" onclick="checkTest1(this),checkTest2()"/>
                全选
            </li>
            <li>商品</li>
            <li>单价</li>
            <li>数量</li>
            <li>小计</li>
            <li>操作</li>
        </ul>
    </div>
    <!--显示菜单的结束-->


  <!--商品的详情展示开始-->
    <div class="info warp" data-product-id="1">
        <ul>
            <li class="info_1"><input type="checkbox" name="fav" onclick="checkTest2()"/></li>
            <li class="info_2"><img src="img/zhuzi.jpg" width="100px"/></li>
            <li class="info_3">
                <a>海蒂极简系列9.5-10mm18K金淡水珍珠耳钉素耳饰女附证书七夕礼物</a>
            </li>
            <li class="info_4"><a>白色 9.5-10mm [日常百搭]</a></li>
            <li class="info_5"><a>¥439.00</a></li>
            <li class="info_6">
            <button class="but_1" onclick="checkTest3(this, -1, 1),checkTest2()">-</button>
            <input type="text" name="quantity" class="quantity" value="1" data-product-id="1" />
            <button class="but_2" onclick="checkTest3(this, 1, 1),checkTest2()">+</button>
            </li>
            <li class="info_7"><span class="totalPrice" data-product-id="1">¥439.00</span></li>
           <li class="info_8">
               <button class="but_3">
                    <a href="javascript:void(0)" onclick="checkTest4(this),checkTest2()">删除</a>
               </button><br />
               <button class="but_4">
                    <a>移入关注</a>
               </button>
            </li>
        </ul>
    </div>

   <div class="info warp" data-product-id="2">
        <ul>
            <li class="info_1"><input type="checkbox" name="fav" onclick="checkTest2()" /></li>
            <li class="info_2"><img src="img/miphone.jpg" width="100px"/></li>
            <li class="info_3">
                <a>小米 Redmi K70 全网通5G手机 16GB+1TB 墨羽 ZG</a>
            </li>
            <li class="info_4"><a>墨羽 16GB+1TB</a></li>
            <li class="info_5"><a>¥3129.0</a></li>
            <li class="info_6">
            <button class="but_1" onclick="checkTest3(this, -1, 2),checkTest2()">-</button>
            <input type="text" name="quantity" class="quantity" value="1" data-product-id="2" />
            <button class="but_2" onclick="checkTest3(this, 1, 2),checkTest2()">+</button>
            </li>
            <li class="info_7"><span class="totalPrice" data-product-id="2">¥3129.00</span></li>
            <li class="info_8">
                <button class="but_3">
                    <a href="javascript:void(0)" onclick="checkTest4(this),checkTest2()">删除</a>
                </button><br />
                <button class="but_4">
                    <a>移入关注</a>
                </button>
            </li>
        </ul>
    </div>

   <div class="info warp" data-product-id="3">
        <ul>
            <li class="info_1"><input type="checkbox" name="fav" onclick="checkTest2()"/></li>
            <li class="info_2"><img src="img/camera.jpg" width="100px"/></li>
            <li class="info_3">
                <a>小米摄像头C300双摄版高清无线摄像头监控家用室内智能摄像机手机远程监</a>
            </li>
            <li class="info_4"><a>【套餐一】小米摄像头+64G内存卡+吊装支架</a></li>
            <li class="info_5"><a>¥319.00</a></li>
              <li class="info_6">
            <button class="but_1" onclick="checkTest3(this, -1, 3),checkTest2()">-</button>
            <input type="text" name="quantity" class="quantity" value="1" data-product-id="3" />
            <button class="but_2" onclick="checkTest3(this, 1, 3),checkTest2()">+</button>
            </li>
            <li class="info_7"><span class="totalPrice" data-product-id="3">¥319.00</span></li>
            <li class="info_8">
                <button class="but_3">
                    <a href="javascript:void(0)" onclick="checkTest4(this),checkTest2()">删除</a>
                </button><br />
                <button class="but_4">
                    <a>移入关注</a>
                </button>
            </li>

        </ul>
    </div>
  <!--商品的详情展示结束-->

  <!--结算开始-->
  <div class="balance warp">

      <ul class="balance_ul1">
          <li>
              <input type="checkbox" name="fav" id="" value="" onclick="checkTest1(this),checkTest2()" />
              全选
          </li>
          <li><a>删除选中商品</a></li>
          <li><a>移入关注</a></li>
          <li><a>清理购物车</a></li>
      </ul>

      <ul class="balance_ul2">
          <li><a>已选择<span id="snum">1</span>件商品</a></li>
          <li><a>总价<span id="zongz">¥12</span></a></li>
          <li>
              <button class="butt">去结算</button>
          </li>
      </ul>
  </div>
  <!--结算结束-->
</body>
</html>
css代码
jd.css
.nav {
    height: 30px;
    background-color: #f1f1f1;
}

.warp {
    width: 1000px;
    margin: 0px auto;
}

.nav_ul1, .nav_ul2 > li {
    float: left;
}

.nav_ul1 li {
    float: left;
    line-height: 30px;
    margin-right: 20px;
}

.nav_ul1 a, .nav_ul2 a, .nav_ul2 span {
    font-size: 12px;
    color: grey;
}

.nav_ul2 {
    float: right;
}

.nav_ul2 li, .nav_ul2 span {
    line-height: 30px;
    margin-left: 10px;

}

.nav a:hover {
    color: red;
}

/*搜索框开始*/
.search{
    margin-top: 20px;
}
.search_1 li a{
    float: left;
    margin-top: 20px;
    margin-left:20px;
    font-size: 16px;
    color: black;
}
.search img{
    /*清除之前的所有样式*/
    clear: both;
    float: left;
}
.search_div{
    float: right;
    margin-top: 25px;

}

.search_text{
    width: 265px;
    height: 21px;

    border: 3px solid #c91623;

    position: relative;
    left: 4px;
    top: -1px;
}

.search_but{
    width: 51px;
    height: 28px;
    background-color: #c91623;
    border: 0px;
    color: #FFFFFF;
}
/*搜索框结束*/

/*标题的开始*/
.title{
    margin-top: 130px;
}

.title h3{
    float: left;
    font-size: 23px;
    color: #c91623;
}

.title div{
    float: right;
    font-size: 14px;
    color: gray;
}
/*标题的结束*/

/*显示菜单的开始*/
.tips{
    width: 1000px;
    height: 50px;
    background-color: #f1f1f1;
    margin-top: 165px;
    border: 1px solid #e9e9e9;
}

.tips li{
    float: left;
    line-height: 50px;
    font-size: 12px;
    color: gray;

}

.tips li:nth-child(1){width: 90px;border-top: 3px solid #c91623;}
.tips li:nth-child(2){margin-left: 80px}
.tips li:nth-child(3){margin-left: 430px}
.tips li:nth-child(4){margin-left: 83px}
.tips li:nth-child(5){margin-left: 110px}
.tips li:nth-child(6){margin-left: 50px}
/*显示菜单的结束*/

/*商品详情展示开始*/
.info{
    width: 1000px;
    height: 130px;
    background-color: #fff4e8;
    border:1px solid gray;
    margin-top: 20px;

    border-top: 3px solid gray;
}

.info li{
    float:left;
    margin-top: 13px;
}

.info a{
    font-size: 12px;
    color: #333333;
}
.info_1{
    margin-left: 23px;
}

.info_2{
    margin-left: 15px;
    border:1px solid gray;
}

.info_3{
    margin-left: 30px;
    width: 270px;
    height: 20px;

}

.info_3 a:hover{
    color: #c91623;
}

.info_4{
    margin-left: 30px;
    width: 100px;
    height: 20px;
}

.info_5{
    margin-left: 30px;

}

.info_6{
    margin-left: 40px;
}

.info_6 input{
    width: 30px;
    height: 13px;
    text-align: center;
    position: relative;
    line-height: 11px; /* 行高与按钮高度相同,实现垂直居中 */
    top:-2px;
    left: -5px;
}

.info_6 button{
    width: 18px;
    height: 18px;
}

.but_1{
    position: relative;
    text-align: center; /* 文本水平居中 */
    line-height: 11px; /* 行高与按钮高度相同,实现垂直居中 */
    top:-2px;
    left: 1px;

}
.but_2{
    position: relative;
    text-align: center; /* 文本水平居中 */
    line-height: 11px; /* 行高与按钮高度相同,实现垂直居中 */
    top:-2px;
    left: -11px;
}
.info_7{
    margin-left: 50px;
    font-weight: bold;
}

.info_8{
    margin-left: 130px;
}

.but_3{
    position: relative;
    top:-30px
}
.but_4{
    position: relative;
    top:-26px
}
/*商品详情展示结束*/

/*结算模块的开始*/
.balance{
    width: 1000px;
    height: 50px;
    border: 1px solid gray;
    margin-top: 20px;
}

.balance_ul1,.balance_ul1>li,.balance_ul2>li{
    float: left;
    line-height: 50px;
    margin-left: 11px;
}

.balance_ul2{
    float: right;
}

.butt{
    width: 100px;
    height: 50px;
    background-color: #c91623;
    border: 0px ;
    color: #FFFFFF;
    font-size: 20px;
    font-weight: bold;
}

.balance span{
    font-size: 25px;
    color: #c91623;
    font-weight: bold;
}
/*结算模块的结束*/
reset.css
/*清除所有的初始格式*/
body,div,h1,h2,h3,h4,h5,h6,li,ol,ul{margin:0px;padding: 0px;}
/*位置居中,且设置字体大小为14px*/
body{text-align: center;font-size: 14px}
/*去重超链接的下划线*/
a{text-decoration: none;}
li{list-style: none;}
js代码
jd.js
//获得所有的多选框对象
    var fav=document.getElementsByName("fav");

//判断是否全选的操作
function checkTest1(th){
    var flag=th.checked;
        for(var i in fav) {
            fav[i].checked = flag;
        }
}

function checkTest2() {
    var fav = document.getElementsByName('fav'); // 获取所有名为fav的复选框
    var flag = true;
    var zong = 0;
    var spNum = 0;

    // 检查是否所有商品都被选中
    for (var i = 1; i < fav.length - 1; i++) {
        if (!fav[i].checked) {
            flag = false;
            break;
        }

        // 如果选中,计算价格和数量
        var productDiv = fav[i].closest('.info'); // 获取最近的.info元素
        var priceText = productDiv.querySelector('.info_7 .totalPrice').innerText.split('¥')[1];
        var quantityInput = productDiv.querySelector('.info_6 .quantity').value;

        zong += Number(priceText) * Number(quantityInput);
        spNum += Number(quantityInput);
    }

    // 更新全选框状态
    fav[0].checked = flag;
    // 注意:假设最后一个复选框不是用于商品的,所以这里不设置

    // 更新显示的总价和总数量
    document.getElementById("zongz").innerText = '¥' + zong.toFixed(2);
    document.getElementById("snum").innerText = spNum;

    // 如果全未选中,则总价和总数量应为0
    if (spNum === 0) {
        document.getElementById("zongz").innerText = '¥0.00';
        document.getElementById("snum").innerText = 0;
    }
}



function checkTest3(button, increment, productId) {
    // 找到输入框
    var input = document.querySelector('.info[data-product-id="' + productId + '"] .quantity');

    // 获取当前值并转换为数字
    var currentValue = Number(input.value);

    // 更新值,注意检查最小值
    var newValue = currentValue + increment;
    if (newValue < 0) {
        newValue = 0; // 不允许数量小于0
    }

    // 更新输入框的值
    input.value = newValue;

    // 找到单价和总价元素
    var unitPriceElement = document.querySelector('.info[data-product-id="' + productId + '"] .info_5 > a'); // 假设单价存储在这里,需要根据实际HTML结构调整
    var totalPriceElement = document.querySelector('.info[data-product-id="' + productId + '"] .totalPrice');

    // 获取单价(这里需要根据实际HTML结构调整选择器)
    var unitPrice = parseFloat(unitPriceElement.textContent.replace('¥', ''));

    // 计算总价格
    var totalPrice = unitPrice * newValue;

    // 更新总价显示
    totalPriceElement.textContent = '¥' + totalPrice.toFixed(2);
}

//删除指定的节点
function checkTest4(th) {
    // 使用 closest 方法找到最近的带有 class="info warp" 的 div 元素
    var div = th.closest('.info.warp');
    if (div) {
        div.remove();
    }
}

结尾

以上就是我的全部代码,一点一点敲的,希望对你们有帮助。

本文已经添加了js代码对其中的动态效果功能进行了完善,当然我完善的并不是很好,初学者水平有限见谅先凑合看吧。感谢观看,如果你能看到这里或者本文对你有一点点帮助请点赞收藏,再次感谢大家。如果需要项目源码压缩包,详细见资源绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值