原生JS 购物车及购物页面的cookie使用方法


Posted in Javascript onAugust 21, 2017

直接上代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>购物页面</title>
<style>
ul{list-style:none;padding:0;margin:0;}
.goods li{display:inline-block;border:1px solid #ddd;padding:10px;margin:10px;}
.goods li:hover{}
.goods .price{color:#f00;font-weight:bold;}
.goods .price::before{
content:"¥";
}
</style>
<script>
window.onload = function(){
var goods = document.getElementsByClassName('goods')[0];

// 用于保存购物车商品信息
var carList = [];

// 先获取当前cookie
var cookies = document.cookie.split('; ');
for(var i=0;i<cookies.length;i++){
var arr = cookies[i].split('=');
if(arr[0] === 'carlist'){
carList = JSON.parse(arr[1]);
}
}

// 事件委托
goods.onclick = function(e){
e = e || window.event;
var target = e.target || e.srcElement;

// 添加到购物车
if(target.tagName.toLowerCase() === 'button'){

// 获取当前li
var currentLi = target.parentElement.parentElement;
var children = currentLi.children;
var currentGUID = currentLi.getAttribute('data-guid');

// 先创建一个对象保存当前商品信息
var goodsObj = {};
goodsObj.guid = currentGUID;
goodsObj.qty = 1;
goodsObj.name = children[1].innerHTML;
goodsObj.price = children[2].innerHTML;
goodsObj.imgUrl = children[0].src;

// 如果cookie为空,则直接添加
if(carList.length===0){
// 添加到carList
carList.push(goodsObj);
}else{
// 先判断cookie中有无相同的guid商品
for(var i=0;i<carList.length;i++){
// 如果商品已经存在cookie中,则数量+1
if(carList[i].guid === currentGUID){
carList[i].qty++;
break;
}
}

// 如果原cookie中没有当前商品
if(i===carList.length){
// 添加到carList
carList.push(goodsObj);
}

}	
// 存入cookie
// 把对象/数组转换诚json字符串:JSON.stringify()
document.cookie = 'carlist=' + JSON.stringify(carList);
}

}
}
</script>
</head>
<body>
<ul class="goods">
<li data-guid="g01">
<img src="images/shirt_1.jpg">
<p>短袖衬衣</p>
<p class="price">98.88</p>
<div class="add2cart">
<button>添加到购物车</button>
</div>
</li>
<li data-guid="g02">
<img src="images/shirt_2.jpg">
<p>短袖衬衣2</p>
<p class="price">88.88</p>
<div class="add2cart">
<button>添加到购物车</button>
</div>
</li>
<li data-guid="g03">
<img src="images/shirt_3.jpg">
<p>短袖衬衣3</p>
<p class="price">9.98</p>
<div class="add2cart">
<button>添加到购物车</button>
</div>
</li>
<li data-guid="g04">
<img src="images/shirt_4.jpg">
<p>短袖衬衣4</p>
<p class="price">8.88</p>
<div class="add2cart">
<button>添加到购物车</button>
</div>
</li>
</ul>
<a href="04car.html" rel="external nofollow" >去结算</a>
</body>
</html>

//购物车页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>购物车</title>
<style>
#carList li{position:relative;padding-bottom:15px;margin-bottom:15px;border-bottom:1px solid #ddd;}
#carList img{display:block;width:100px;}
#carList li .btn-close{position:absolute;top:0;right:0;padding:0 5px;cursor:default;}
#carList li .btn-close:hover{color:#fff;}
.subPrice{padding:5px 20px;color:#f00;font-weight:bold;text-align:right;}
#carList .price{color:#f00;}
.price::before{
content:'¥';
font-size:11px;
}
#carList .price span{font-size:11px;}
</style>
<script>
window.onload = function(){
/*
读取cookie中的carlist
把json字符串转换成对象/数组:JSON.parse()
json字符串格式:
1.必须用双引号
2.不能右注释
*/
var oCarList = document.getElementById('carList');
var oSubPrice = oCarList.nextElementSibling;
var btnClear = document.getElementById('btnClear');

var carList;
var cookies = document.cookie.split('; ');
for(var i=0;i<cookies.length;i++){
var arr = cookies[i].split('=');
if(arr[0] === 'carlist'){
console.log(JSON.parse(arr[1]));
carList = JSON.parse(arr[1]);
}
}

var subPrice = 0;

if(carList){
var ul = document.createElement('ul');
for(var i=0;i<carList.length;i++){
var li = document.createElement('li');
// 给每个li添加data-guid属性
li.setAttribute('data-guid',carList[i].guid);

// 商品名
var title = document.createElement('h4');
title.innerHTML = carList[i].name;

// 商品价格
var price = document.createElement('p');
price.className = 'price';
price.innerHTML = carList[i].price + '×' + carList[i].qty;

// 商品图片
var img = document.createElement('img');
img.src = carList[i].imgUrl;

// 添加删除按钮
var btnClose = document.createElement('span');
btnClose.innerHTML = '×';
btnClose.className = 'btn-close';

// 计算总价
subPrice += carList[i].price*carList[i].qty;

li.appendChild(title);
li.appendChild(price);
li.appendChild(img);
li.appendChild(btnClose);

ul.appendChild(li);
}

// 写入页面
oCarList.appendChild(ul);

// 写入总价
// toFixed(n)获取小数点后n位(自动四舍五入,Number类型的方法)
oSubPrice.innerHTML = '<span class="price">' + subPrice.toFixed(2) + '</span>';
}


// 删除商品
oCarList.onclick = function(e){
e = e || window.event;
var target = e.target || e.srcElement;

// 是否点击了删除按钮
if(target.className === 'btn-close'){
var currentLi = target.parentElement;

// 获取当前guid
var currentGUID = currentLi.getAttribute('data-guid');

// 删除cookie中对应的商品
// 根据guid取对比
for(var i=0;i<carList.length;i++){
// 找出要删除的商品
if(carList[i].guid === currentGUID){
carList.splice(i,1);
break;
}
}

// 更新cookie
document.cookie = 'carlist=' + JSON.stringify(carList);

// 删除li节点
currentLi.parentElement.removeChild(currentLi);
}
}

// 清空购物车
// 1、删除DOM节点
// 2、删除cookie
btnClear.onclick = function(){
oCarList.innerHTML = '';
oSubPrice.innerHTML = '';

// 利用设置有效期位过期事件来达到删除cookie的效果
var now = new Date();
now.setDate(now.getDate()-7);
document.cookie = 'carlist=xx;expires=' + now;
}
}

</script>
</head>
<body>
<h1>购物车</h1>
<div id="carList">

</div>
<div class="subPrice"></div>
<a href="#" rel="external nofollow" id="btnClear">清空购物车</a>
</body>
</html>

以上这篇原生JS 购物车及购物页面的cookie使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
jquery实现鼠标拖动图片效果示例代码
Jan 09 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
Sep 28 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
layer弹出层中H5播放器全屏出错的解决方法
Feb 21 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
JS实现的A*寻路算法详解
Dec 14 Javascript
手挽手带你学React之React-router4.x的使用
Feb 14 Javascript
Node.js文本文件BOM头的去除方法
Nov 22 Javascript
webpack3+React 的配置全解
Aug 21 #Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 #Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
Aug 21 #Javascript
Vue编写多地区选择组件
Aug 21 #Javascript
使用vue制作FullPage页面滚动效果
Aug 21 #Javascript
详解Layer弹出层样式
Aug 21 #Javascript
JS数组操作之增删改查的简单实现
Aug 21 #Javascript
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
JavaScript Chart 插件整理
2010/06/18 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
利用python发送和接收邮件
2016/09/27 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
python实现整数的二进制循环移位
2019/03/08 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
公休请假条
2014/04/11 职场文书
铁路安全反思材料
2014/12/24 职场文书
python如何做代码性能分析
2021/04/26 Python
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
MySQL详细讲解变量variables的用法
2022/06/21 MySQL