利用原生JS跳转购物车

1.将数据存储到localStorage
(1)localStorage用法:
A.设定
localStorage.setItem(键名,键值:json串格式)
localStorage.setItem(‘cart’,JSON.stringfy([{name:‘电脑’,pay:100,num:2}]))
B.获取
localStorage.getItem(‘键名’)
(2)判断购物车是否为空
A.是空车
给当前数据添加属性,写入到购物车
1.如果用localStorage.getItem判断键名cart为null,添加商品信息
2.在ajax里面给空对象赋值ajax返回的res,在外面定义。定义全局变量空对象msg
3.给全局变量msg赋值’购买数量’的属性,默认值为1
给全局变量msg赋值’购买选中’的属性,默认值为true,因为进去购物车之后是默认选中的
4.(由于购物车中,不止一个商品,因此需要创建数组,去存储商品数据信息)
创建新的空数组,向空数组arr中push写入msg的商品信息
将数组写进localStorage中进行存储,localStorage.setItem(‘cart’,JSON.stringfy(arr))

   B.不是空车
      当前商品已经在购物车 购买数量+1
      当前商品没有在购物车 添加属性,写入购物车
      1.如果已经有了商品,就要获取localStorage中存储的商品
        let arr = JSON.parse(localStorage.getItem('cart'));
      2.获取到存储的数组之后,需要循环遍历,来确定购物车中是否有这件商品
        也就是,msg中获取的当前商品的goods_id是否相同
          A.如果item里面的ID和msg里面的ID相同,就让item里面的num属性自增num++
            将新的数组重新设定给cart购物车存储
          B.如果不同,则设置一个开关。
            在判断外面设置一个初始值bool为true
            在判断有这个商品中赋值返回一个bool为false
            如果bool为初始值,则num为
(3)实际案例
    1.判断localStorage.getItem('cart')是否为null
      是的话,输出内容;不是的话,在else中调用第二步生成的函数
    2.设置一个函数,用来生成页面
      (1).获取localStorage.getItem('cart')商品数据内容
      (2).不需要循环的头和尾,直接给str赋值=。
      (3).需要循环遍历的中间内容,对arr,也就是响应体得到的并存储到localStorage的数据进行forEach循环
            在循环体中,令str+=中间模板字符串的内容
      (4).循环外面 将str+=尾部
      (5).内容写入container中
    3.对整个父级进行事件委托
      (1)由于用JQ获取到的整个标签对象为伪数组,因此需要带一个下标[0],指代标签对象本身
           --JS与JQ的标签转化。JS=>JQ 用$()包
                              JQ=>JS 用[0]
      (2)在点击事件委托中,先用localStorage.getItem获取cart数据
      (3)判断全选,不选以及反选按钮。给HTML中input,type=CheckBox的属性中添加判断
           判断如果item的属性buy为true,就添加'checked'属性,否则就为空字符串
            --如果点击的是全选,则循环arr数组里的item,令item的属性buy为true
            --如果点击的是不选,则循环arr数组里的item,令item的属性buy为false
            --如果点击的是反选,则循环arr数组里的item,令item的属性buy值取反
              ---在取反中,需要改变localStorage存储的数据,而不是单纯改变CheckBox的状态
                  1.在input中添加,index属性,属性值为当前标签item的goods_id
                  2.循环遍历item,判断item的goods_id与点击的标签e.target获取的index标签是否相等
                    ----全等需在获取index样式后面-0,字符串变为数值
                    如果相等,就给item的buy属性赋值e.target.checked,就是赋值当前点击的
                    (就是修改localStorage存储的item中的buy属性)
           最后将新的数组写入到localStorage。localStorage.setItem('cart',JSON.stringfy(arr))
      (4)删除操作
          1.给点击删除的标签添加,index属性值,让他为item的goods_id
          2.点击事件委托,为删除的标签。循环遍历数组
          3.判断循环的每一个item的goods_id是否等于委托事件e.target获取到的index属性值
            如果是,就给arr进行splice删除商品单元。arr.splice(key,1)
            从索引key开始,删除1个
      (5)左右加减操作
          1.如果事件的点击为加,则arr循环每一个item对象。
          2.添加禁用效果
             在HTML模板字符串,添加,如果item.num值为item.goods_number,就disabled,不然就为空字符串
      (6)生成最底部的件数,钱数
          1.在最前面定义件数,钱数初始值都为0
          2.循环arr,如果item的buy为ture,则种类自增++,件数为加等于+=item.num,钱数为+=item.num*item.goods_price
          3.给模板字符串中的价格进行to.fixed,保留两位小数
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值