说明:cookie的操作须有域名,简单点说就是需要用发布的方式去访问,查看cookie信息请用开发者模式进入application栏

1.页面布局(结构)(根目录)

商品列表

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>商品列表</title>
<link rel="stylesheet" type="text/css" href="styles/productList.css"/>
</head>
<body>
<div class="listbox">
<a href="shoppingCart.html" class="mycart">我的购物车</a>
<ul id="list" class="list">
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/1.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/1.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/2.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/2.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/3.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/3.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/4.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/4.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/5.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/5.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/6.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/6.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/7.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/7.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
<li>
<a href="javascript:;" class="abtn" data-id="" data-url="images/8.jpg" data-title="8h 鹅绒被" data-price="" data-amount="">添加到购物车</a>
<img src="data:images/8.jpg" alt="">
<div class="title">8h 鹅绒被</div>
<div class="price">¥</div>
</li>
</ul>
</div>
</body>
<script type="text/javascript" src="scripts/common.js"></script>
<script type="text/javascript" src="scripts/productList.js"></script>
</html>

productList.html

购物车商品页面

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>商品列表</title>
<link rel="stylesheet" type="text/css" href="styles/productList.css"/>
</head>
<body>
<div class="listbox">
<a href="productList.html" class="mycart">返回商品列表</a>
<ul id="list" class="list">
</ul>
</div>
</body>
<script type="text/javascript" src="scripts/common.js"></script>
<script type="text/javascript" src="scripts/shoppingCart.js"></script>
</html>

shoppingCart.html

2.页面样式(样式)(文件夹名称:styles)

@charset "ntf-8";
/* css document */
/* 样式覆盖 */
html,body,form,table,th,tr,td,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,fieldset,figure,hr,div{
margin: ;
padding: ;
}
html,body{
height: %;
}
body{
font-family: "Microsoft YaHei","Arial";
font-size: 16px;
background: #f3f3f3;
} ul,ol{
list-style: none;
} img{
border: none;
display: block;
} a{
text-decoration: none;
}
/* listbox */
.listbox{
width: %;
margin: auto;
overflow:hidden;
text-align: center;
}
.mycart{
display: inline-block;
padding: 10px 50px;
border: 10px solid #f3f3f3;
font-weight: bold;
font-size: 18px;
color: #;
background: #e33333;
}
.list li{
width: %;
background: #ffffff;
float: left;
min-height: 100px;
_height:100px;
box-sizing: border-box;
border: 10px solid #f3f3f3;
text-align: center;
border-radius: 10px;
}
.list li img{
width: %;
}
.list li .abtn{
width: %;
height: 50px;
display: inline-block;
background: #e33333;
font-weight: bold;
line-height: 50px;
text-decoration: none;
color:#;
cursor: pointer;
letter-spacing: 8px;
}
.list li .title{
line-height: 40px; }
.list li .price{
line-height: 40px;
color: #e33333;
font-size: 18px;
}

productList.css

3.脚本文件(行为)(文件夹名称:scripts)

封装函数及公用的方法

/*封装的公用函数—开始*/
function $(id) {
return document.getElementById(id);
}
function getTagByClassName(sClassName) {
if (document.getElementsByClassName) {
return document.getElementsByClassName(sClassName);
}
else
{
var allTags=document.getElementsByTagName("*");
var tag=[];
for (var i = ; i < allTag.length; i++) {
if (allTags[i].className==sClassName) {
tag.push(allTags[i]);
}
}
return tag;
}
}
/*封装的公用函数—完毕*/ //增加或修改cookie
function setCookie(name,value,days,path){
days=days||;
path=path||'/';
var oDate=new Date();
oDate.setDate(oDate.getDate()+days);
document.cookie = name + '=' + encodeURIComponent(value) + ';expires=' + oDate +';path=' + path;
}
// 获取cookie
function getCookie(name) {
var aCookie = document.cookie.split('; ');
for(var i = ; i < aCookie.length; i++) {
var temp = aCookie[i].split('='); if(temp[] === name) {
return decodeURIComponent(temp[]);
}
}
}

common.js

关于商品列表的脚本

/*网页加载完成后执行的事件*/
window.onload=function() {
var oAbtn=getTagByClassName("abtn");
for (var i = ; i < oAbtn.length; i++) {
oAbtn[i].onclick=function() {
var goodId=this.getAttribute('data-id');
var goodSrc=this.getAttribute('data-url');
var goodTitle=this.getAttribute('data-title');
var goodPrice=this.getAttribute('data-price');
var goodAmount=this.getAttribute('data-amount');
//创建货物对象并赋值
var oGood={
id:goodId,
src:goodSrc,
title:goodTitle,
price:goodPrice,
amount:goodAmount
};
//读取内存中的cookie信息
var sGoodlist=getCookie("aGoodList")
//获取货物数组,如果货物数组存在则在此基础上进行修改数据,不存在则创建新的数组存储货物对象
var aGoodList=sGoodlist?JSON.parse(sGoodlist):[];
//判断是否存在将要添加到购物车的货物
var whetherExsits=aGoodList.every(function(v) {
if (v.id===oGood.id) {
//存在修改购物车的货物数量
v.amount++;
return false;
}
return true;
});
//不存在则将货物对象追加到数组
if (whetherExsits) {
aGoodList.push(oGood);
}
setCookie("aGoodList",JSON.stringify(aGoodList),);
}
}
}

productList.js

关于购物车的脚本

window.onload=function() {

    var sGoodlist=getCookie("aGoodList");
var aGoodList=sGoodlist?JSON.parse(sGoodlist):[];
for (var i = ; i < aGoodList.length; i++) {
var oLi=document.createElement('li');
oLi.innerHTML='<a href="javascript:;" class="abtn" data-id="'+aGoodList[i].id+'">删除该商品</a><img src="'+aGoodList[i].src+'" /><div class="title">'+aGoodList[i].title+'</div><div class="price">¥'+aGoodList[i].price+'/个|数量'+aGoodList[i].amount+'</div>';
$("list").appendChild(oLi);
var oAbtn=getTagByClassName("abtn");
oAbtn[i].index=i;
oAbtn[i].onclick=function() {
//商品数量没删除一次减一件
if (aGoodList[this.index].amount>) {
aGoodList[this.index].amount--
}
else
{
//剩余一件商品删除该对象
$("list").removeChild(this.parentNode);
aGoodList.splice(this.index,)//掌握splice的应用
}
//将最新商品保存到cookie
setCookie("aGoodList",JSON.stringify(aGoodList),);
window.location.reload();
}
}
}

shoppingCart.js

4.图片资源(上方为图片名称)(文件夹名称:images)

1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg

8.jpg

Demo—cookie电商购物车的更多相关文章

  1. Laravel 获取当前 Guard 分析 —源自电商购物车的实际需求

    iBrand 产品中关于购物车的需求比较复杂,我们基于 overture/laravel-shopping-cart 扩展出了更加符合电商需求的购物车包,之前有文章进行过简单的介绍: Laravel ...

  2. 【Redis】Hash常见应用场景 - 电商购物车

    电商购物车 以用户id为key 商品id为field 商品数量为value 购物车操作 [key(用户id),field(商品id),value(数量)] 添加商品 -> hset cart: ...

  3. 走进Vue时代进阶篇(01):重构电商购物车模块

    前言 从这篇文章开始,我准备给大家分享一些关于Vue.js这门框架的技巧性系列文章,正好我们公司项目中也用到了Vue.所以,教是最好的学.进阶篇比较适合于二三线城市,还在小厂打拼的童鞋们.欢迎你们跟着 ...

  4. iOS 电商购物车倒计时时间计算

    /** * 倒计时 * * @param endTime 截止的时间戳 * * @return 返回的剩余时间 */ - (NSString*)remainingTimeMethodAction:(l ...

  5. 使用“消息服务框架”(MSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)

    1,示例解决方案介绍 在上一篇 <消息服务框架(MSF)应用实例之分布式事务三阶段提交协议的实现>中,我们分析了分布式事务的三阶段提交协议的原理,现在我们来看看如何使用消息服务框架(MSF ...

  6. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  7. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  8. Java开源生鲜电商平台-购物车模块的设计与架构(源码可下载)

    ava开源生鲜电商平台-购物车模块的设计与架构(源码可下载) 说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题, ...

  9. Cookie防伪造防修改 电商课题:cookie防篡改

    主要防止非法用户修改cookie信息,以及cookie的超时时间 传统cookie存储,Cookie(name, value),value很容易就被篡改. 防修改cookie存储,Cookie(nam ...

随机推荐

  1. Linux学习笔记 -- 文件包含

    简述 简单来讲,shell 中的文件包含指的是在一个文件中引用另外一个文件.通过这种方式,我们可以将一些公用的代码封装为一个独立的文件,并在需要的时候引用它即可. 语法 . filename # 注意 ...

  2. Codeforces-20152016-northwestern-european-regional-contest-nwerc-A题

    一.题目 二.题意 (1)一开始理解成:它最多需要开多少台电脑.同时,我又有个疑问,既然是最多需要开多少台,那不变成了总共有几个人开几台是最大的结果.然后,WA了无数发.直到比赛结束......其实说 ...

  3. 安装FFmpeg3.0.9

    //静态版的 FFmpeg Static Builds   release: 3.3.3 https://www.johnvansickle.com/ffmpeg/ ffmpeg-release-64 ...

  4. 【洛谷】P1388 算式(dp)

    题目描述 给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号.例如: N ...

  5. SSMS安装英文版后无法修改为中文

    SSMS的UI语言和所安装的Visual Studio的语言是相关的,你这种情况应该是第一次安装的时候安装了英文版的visual studio isolated shell,在卸载的时候你没有卸载这个 ...

  6. Running command-line BLAST

    Ubuntu安装BLAST 2014-02-09 10:45:03|  分类: Linux/Ubuntu|举报|字号 订阅     下载LOFTER我的照片书  |     very easy! su ...

  7. pycharm安装---优秀的IDE

    概述:pycharm当前来讲是python最优秀的IDE. 1. 官网下载安装包 2.解压 3. cd 到解压的bin文件中 4.执行sh ./pycharm.sh 5.锁定到图标中

  8. Rhythmk 一步一步学 JAVA (14) Spring-3 @Autowired,@Qualifier @Required @Resource @Component,@Service,@Controller,@Repository @PostConstruct,@PreDestroy

    1.@Autowired 注解:首先在使用时候需要引入配置: <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 --> ...

  9. **字符串格式化:%和.format

    字符串格式化:%和.format .format在许多方面看起来更便利.对于%最烦人的是它无法同时传递一个变量和元组.你可能会想下面的代码不会有什么问题: "hi there %s" ...

  10. 跟我学算法聚类(kmeans)

    kmeans是一种无监督的聚类问题,在使用前一般要进行数据标准化, 一般都是使用欧式距离来进行区分,主要是通过迭代质心的位置 来进行分类,直到数据点不发生类别变化就停止, 一次分类别,一次变换质心,就 ...