原生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分析、压缩工具 JavaScript Analyser
Nov 30 Javascript
JavaScript 5 新增 Array 方法实现介绍
Feb 06 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
jQuery实现复选框批量选择与反选的方法
Jun 17 Javascript
纯JavaScript实现实时反馈系统时间
Oct 26 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
Nov 22 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
Dec 22 Javascript
微信小程序 调用微信授权窗口相关问题解决
Jul 25 Javascript
JS 事件机制完整示例分析
Jan 15 Javascript
原生JS实现汇率转换功能代码实例
May 13 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
May 29 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 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
php实现将Session写入数据库
2015/07/26 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
javascript 写类方式之一
2009/07/05 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
Python实现处理管道的方法
2015/06/04 Python
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
国贸专业个人求职信分享
2013/12/04 职场文书
优秀演讲稿范文
2013/12/29 职场文书
学校与家长安全责任书
2014/07/23 职场文书
民族学专业求职信
2014/07/28 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
用Python创建简易网站图文教程
2021/06/11 Python
mysql 索引合并的使用
2021/08/30 MySQL