将对象里的属性值写到标签里、显示赠品案例、购物车展示——JS进阶

11 篇文章 0 订阅
7 篇文章 0 订阅

目录

1. 将对象里的属性值写到标签里

2. 显示赠品案例

3. 购物车展示

1. 将对象里的属性值写到标签里

<body>
  <div></div>
  <script>
    const spec = { size: '40cm*40cm', color: '黑色' }
    //1. 所有的属性值回去过来  数组
    // console.log(Object.values(spec))
    // 2. 转换为字符串   数组join('/') 把数组根据分隔符转换为字符串
    // console.log(Object.values(spec).join('/'))
    document.querySelector('div').innerHTML = Object.values(spec).join('/') 
  </script>
</body>

2. 显示赠品案例

把字符串拆分为数组,然后利用 map 遍历数组,最后转换为字符串,追加到 p的innerHTML里

<body>
      <p class="name">
        <!-- <span class="tag"></span>
        <span class="tag"></span> -->
      </p>
  <script>
    const  gift = '50g茶叶,清洗球'
    // 1. 把字符串拆分为数组
    console.log(gift.split(','));
    // 根据数组进行遍历
    const str = gift.split(',').map(item => `<span class="tag">【赠品】${item}</span><br>`).join('')
    document.querySelector('.name').innerHTML = str 
  </script>
</body>

3. 购物车展示

根据后台提供的数据,渲染购物车页面

 

注意:在计算合计模块,reduce方法时第二个初始值要写 0 ,因为这是一个数组对象,如果不写得到的第一个 pre是对象。 

结构和 js的代码:  

<body>
  <div class="list">
    <!-- <div class="item">
      <img src="https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg" alt="">
      <p class="name">称心如意手摇咖啡磨豆机咖啡豆研磨机 <span class="tag">【赠品】10优惠券</span></p>
      <p class="spec">白色/10寸</p>
      <p class="price">289.90</p>
      <p class="count">x2</p>
      <p class="sub-total">579.80</p>
    </div> -->
  </div>
  <div class="total">
    <div>合计:<span class="amount">1000.00</span></div>
  </div>
  <script>
    const goodsList = [
      {
        id: '4001172',
        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',
        price: 289.9,
        picture: 'https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg',
        count: 2,
        spec: { color: '白色' }
      },
      {
        id: '4001009',
        name: '竹制干泡茶盘正方形沥水茶台品茶盘',
        price: 109.8,
        picture: 'https://yanxuan-item.nosdn.127.net/2d942d6bc94f1e230763e1a5a3b379e1.png',
        count: 3,
        spec: { size: '40cm*40cm', color: '黑色' }
      },
      {
        id: '4001874',
        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',
        price: 488,
        picture: 'https://yanxuan-item.nosdn.127.net/44e51622800e4fceb6bee8e616da85fd.png',
        count: 1,
        spec: { color: '青色', sum: '一大四小' }
      },
      {
        id: '4001649',
        name: '大师监制龙泉青瓷茶叶罐',
        price: 139,
        picture: 'https://yanxuan-item.nosdn.127.net/4356c9fc150753775fe56b465314f1eb.png',
        count: 1,
        spec: { size: '小号', color: '紫色' },
        gift: '50g茶叶,清洗球'
      }
    ]
    // 1. 根据数据渲染页面
    document.querySelector('.list').innerHTML = goodsList.map( item => {
      // 对象解构
      const { name, price, picture, count, spec, gift } = item
      // 规格文字模块处理
      const text = Object.values(spec).join('/')
      // 处理赠品模块, 注意判断是否有 gift 属性,没有不需要渲染
      const str = gift ? gift.split(',').map( item => `<span class="tag">【赠品】${item}</span>`).join('') : ''
      // 计算小计模块, 单价 * 数量 保留两位小数,
      // 注意精度问题,涉及到小数计算时,经常转换为整数,得到结果然后再缩小
      const subTotal = ((price * 100 * count) / 100).toFixed(2)
      return `
      <div class="item">
        <img src="${picture}" alt="">
        <p class="name">${name}${str}</p>
        <p class="spec">${text}}</p>
        <p class="price">${price.toFixed(2)}</p>
        <p class="count">x${count}</p>
        <p class="sub-total">${subTotal}</p>
      </div>
      `
    }).join('')  //注意map 方法得到的是数组,要转换为字符串
   
    // 3.合计部分
    const total = goodsList.reduce( (pre, current) => (pre * 100 + (current.price * 100 * current.count)) / 100, 0)
    // console.log(total)
    document.querySelector('.amount').innerHTML = total.toFixed(2)
  </script>
</body>
</html>

样式的代码:

  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .list {
      width: 990px;
      margin: 100px auto 0;
    }

    .item {
      padding: 15px;
      transition: all .5s;
      display: flex;
      border-top: 1px solid #e4e4e4;
    }

    .item:nth-child(4n) {
      margin-left: 0;
    }

    .item:hover {
      cursor: pointer;
      background-color: #f5f5f5;
    }

    .item img {
      width: 80px;
      height: 80px;
      margin-right: 10px;
    }

    .item .name {
      font-size: 18px;
      margin-right: 10px;
      color: #333;
      flex: 2;
    }

    .item .name .tag {
      display: block;
      padding: 2px;
      font-size: 12px;
      color: #999;
    }

    .item .price,
    .item .sub-total {
      font-size: 18px;
      color: firebrick;
      flex: 1;
    }

    .item .price::before,
    .item .sub-total::before,
    .amount::before {
      content: "¥";
      font-size: 12px;
    }

    .item .spec {
      flex: 2;
      color: #888;
      font-size: 14px;
    }

    .item .count {
      flex: 1;
      color: #aaa;
    }

    .total {
      width: 990px;
      margin: 0 auto;
      display: flex;
      justify-content: flex-end;
      border-top: 1px solid #e4e4e4;
      padding: 20px;
    }

    .total .amount {
      font-size: 18px;
      color: firebrick;
      font-weight: bold;
      margin-right: 50px;
    }
  </style>
</head>

自动计算图像尺寸 ## image size使用说明 ### 背景 页面中图片资源经常引用过大,造成页面性能浪费,基于此开发了此chrome插件,用于对页面的图片进行检查,即图片样式大小和本身的资源大小是否一致,如不一致,则会进行标注提醒。 ### 功能 * 对于图片预览的页面,可以快速获取图片的尺寸和体积,并且提供复制css的功能 * 对于非图片预览的页面,可以遍历整个页面的图片,对图片样式大小和本身的资源大小进行比较,如不一致,则进行标注提醒。 ### 操作指南 #### 安装地址 打开chrome 浏览器,先从以下地址按照插件 [https://chrome.google.com/webstore/detail/image-size/lohflkahhmfajaaehbljimobcgodmaci](https://chrome.google.com/webstore/detail/image-size/lohflkahhmfajaaehbljimobcgodmaci) #### 开关 ![](https://yanxuan.nosdn.127.net/15619602636762039.png) 开启状态 ![](https://yanxuan.nosdn.127.net/15619602639322040.png) 关闭状态 > 点击 icon 则可以进行开关切换 #### 选项设置 在上述的icon上右键选中 选项 ![](https://yanxuan.nosdn.127.net/15619608095552066.png) 可以进入到插件的配置信息页面 ![](https://yanxuan.nosdn.127.net/15619608826292067.png) #### 选项说明 | 配置 | 说明 | | -- | -- | | tag 颜色 | 有三种颜色切换,防止tag颜色和页面颜色冲突 | | 视觉稿宽 | 和底下那个宽度一起使用 | | 最大兼容宽 | pc则为1:1,即1920:1920;h5则为rem,实际存在比例,常见的为 750:768,750:720 | | 导航高度 | 用于图片信息进行定位,但是页面往往存在导航,会出现遮挡,添加此高度后,定位则会进行优化计算 | | 包含背景图 | 一般不做背景图检查,往往页面中会有雪碧图,尺寸存在不一致,会误报 | | 开启调试 | 开启后则会进行console信息输出 | #### 页面展示 ##### 对于图片预览的页面 页面左上角会展示图片的基本信息 ![](https://yanxuan.nosdn.127.net/15619628363582189.png) ##### 对于非图片预览的页面 图片有错误的则会在页面的右侧标记出错误的位置,点击该tag后,可以展示错误的图片信息 ![](https://yanxuan.nosdn.127.net/15619625575742162.png) 信息如下: ![](https://yanxuan.nosdn.127.net/15619625578562163.png) * 图片预览图 * 【定位】点击后可以进行定位 * 图片链接 * 图片样式尺寸和源尺寸 * 类型分为 图片和背景图 * 以及在页面中的具体dom对象 支持语言:中文 (简体)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值