js实现购物车功能

本文实例为大家分享了js实现购物车功能的具体代码,供大家参考,具体内容如下

购物车实现3种方式

1、利用cookie

优点:不占用服务器资源,可以永远保存,不用考虑失效的问题

缺点: 对购买商品的数量是有限制的,存放数据的大小 不可以超过2k,用户如果禁用cookie那么就木有办法购买商品,卓越网实现了用户当用户禁用cookie,也可以购买。

2、利用 session

优点:用户禁用cookie,也可以购物

缺点:占用服务器资源,要考虑session失效的问题

3、利用数据库

优点:可以记录用户的购买行为,便于数据分析用户的喜好,推荐商品

缺点:给数据库造成太大的压力,如果数据量很大的话。

购物车需求分析

1、可以添加商品到购物车中

2、可以删除购物车中的商品

3、可以清空购物车

4、可以更新购物车的商品

5、可以结算

js代码

/**

* Created by Administrator on 2017/9/3.

*/

/***

* 购物车操作模块

*

*/

//商品类

/***

* @name item

* @example

item(sku, name, price, quantity)

* @params {string} sku 商品的标示

* @params {string} name 商品的名字

* @param {number} price 商品的价格

* @param {number} quantity 商品的数量

*/

function item(sku, name, price, quantity){

this.sku = sku;

this.name = name;

this.price = price;

this.quantity = quantity;

}

var shopCart = function(window){

"use strict";

//全局变量

// note new new Date("2020-12-23") 在ie下面报错,不支持这样的语法

var items = [],cartName='kuaidian_shop_cart',expires = new Date( new Date().getTime()+86400000*30 )

,debug = true,decimal = 2;

var options = {

'cartName' : cartName, //cookie的名字

'expires' : expires, //cookie失效的时间

'debug' : debug, //是否打印调试信息

'decimal' : decimal, //钱的精确到小数点后的位数

'callback' : undefined

};

//暴露给外部的接口方法

return {

inited : false,

init: function(option){

//判断用户是否禁用cookie

if(!window.navigator.cookieEnabled ){

alert('您的浏览器不支持cookie无法使用购物车!,请设置允许设置cookie。');

return false;

}

//从cookie中获取购物车中的数据

this.inited = true;

if(option){

extend(options,option);

}

var cookie = getCookie(options.cartName);

if(typeof cookie === 'undefined'){

setCookie(options.cartName,'',options.expires);

}else{

//每个item之间用&分开,item的属性之间用|分割

var cookie = getCookie(options.cartName);

if(cookie){

var cItems = cookie.split('&');

for(var i=0,l=cItems.length;i<l;i++){

var cItem = cItems[i].split('|');

var item = {};

item.sku = cItem[0] || '';

item.name = cItem[1] || '';

item.price = cItem[2] || '';

item.quantity = cItem[3] || '';

items.push(item);

};

};

};

},

findItem: function(sku){//根据sku标示查找商品

//如果木有提供sku,则返回所有的item

if(sku){

for(var i=0,l=items.length;i<l;i++){

var item = items[i];

if(item.sku === sku){

return item;

}

}

return undefined;

}else{

return items;

}

},

getItemIndex : function(sku){ //获取item在items的数组下标

for(var i=0,l=items.length;i<l;i++){

var item = items[i];

if(item.sku == sku){

return i;

}

}

//木有找到返回-1

return -1;

},

addItem: function(item){ //增加一个新商品到购物车

//添加一个商品

if(this.findItem(item.sku)){

if(options.debug){

_log('商品已经存在了');

return false;

}

}

items.push(item);

_saveCookie();

return true;

},

delItem: function(sku){ //从购物车中删除一个商品

//删除一个商品

var index = this.getItemIndex(sku);

if(index > -1){

items.splice(index,1);

_saveCookie();

}else{

if(options.debug){

_log('商品不存在');

return false;

}

}

},

updateQuantity: function(item){ //更新商品的数量

//更新一个商品

var index = this.getItemIndex(item.sku);

if(index > -1){

items[index].quantity = item.quantity;

_saveCookie();

}else{

if(options.debug){

_log('商品不存在');

return false;

}

}

},

emptyCart: function(){

//清空数组

items.length = 0;

_saveCookie();

},

checkout: function(){

//点击结算后的回调函数

if(options.callback){

options.callback();

}

},

getTotalCount: function(sku){

//获取购物车商品的数量,如果传某个商品的id,那么就返回该商品的数量

var totalCount = 0;

if(sku){

totalCount = (typeof this.findItem(sku) === 'undefined' ? 0 : this.findItem(sku).quantity );

}else{

for(var i=0,l=items.length;i<l;i++){

totalCount += (parseInt(items[i].quantity) === 'NaN' ? 0 : parseInt(items[i].quantity )) ;

}

}

return totalCount;

},

getTotalPrice : function(sku){

//获取购物车商品的总价格 ,如果传某个商品的id,那么就返回该商品的总价格

var totalPrice = 0.0;

if(sku){

var num = parseInt((typeof this.findItem(sku) === 'undefined' ? 0 : this.findItem(sku).quantity )),

price = parseFloat((typeof this.findItem(sku) === 'undefined' ? 0 : this.findItem(sku).price ));

num = num=== 'NaN' ? 0 : num;

price = price === 'NaN' ? 0 : price;

totalPrice = price * num;

}else{

for(var i=0,l=items.length;i<l;i++){

totalPrice += (parseFloat(items[i].price ) * parseInt(items[i].quantity));

}

}

return totalPrice.toFixed(options.decimal);

},

getCookie : getCookie,

setCookie : setCookie

};

/**

* 设置cookie

* @name setCookie

* @example

setCookie(name, value[, options])

* @params {string} name 需要设置Cookie的键名

* @params {string} value 需要设置Cookie的值

* @params {string} [path] cookie路径

* @params {Date} [expires] cookie过期时间

*/

function setCookie(name, value, options) {

options = options || {};

var expires = options.expires || null;

var path = options.path || "/";

var domain = options.domain || document.domain;

var secure = options.secure || null;

/**

document.cookie = name + "=" + escape(value)

+ ((expires) ? "; expires=" + expires.toGMTString() : "")

+ "; path=" + path

+ "; domain=" + domain ;

+ ((secure) ? "; secure" : "");

*/

var str = name + "=" + encodeURIComponent(value)

+ ((expires) ? "; expires=" + expires.toGMTString() : "")

+ "; path=/";

document.cookie = str;

};

/**

* 获取cookie的值

* @name getCookie

* @example

getCookie(name)

* @param {string} name 需要获取Cookie的键名

* @return {string|null} 获取的Cookie值,获取不到时返回null

*/

function getCookie(name) {

var arr = document.cookie.match(new RegExp("(^| )" + name

+ "=([^;]*)(;|$)"));

if (arr != null) {

return decodeURIComponent(arr[2]);

}

return undefined;

};

//***********************私有方法********************/

function _saveCookie(){

var i=0,l=items.length;

if(l>0){

var tItems = [];

for(;i<l;i++){

var item = items[i];

tItems[i] = item.sku + '|' +item.name + '|' + item.price + '|' + item.quantity;

};

var str = tItems.join('&');

setCookie(options.cartName, str, {expires:options.expires});

}else{

setCookie(options.cartName, '', {expires:options.expires});

}

};

//***********************工具方法********************/

//显示调试信息

function _log(info){

if(typeof console != 'undefined'){

console.log(info);

}

};

//继承属性

function extend(destination, source) {

for ( var property in source) {

destination[property] = source[property];

}

};

}(typeof window === 'undifined' ? this: window);

HTML页面简单调用

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

</head>

<body>

<script type="text/javascript" src="./shop.js"></script>

<script>

shopCart.init({

'decimal' : 4

});

var a = new item('aa','bb',12,22);

shopCart.addItem(a); //添加商品到购物车,参数item

shopCart.delItem('12345'); //从购物车中删除商品,参数squ

// shopCart.emptyCart(); //清空购物车

item.quantity = 4;

alert(shopCart.getTotalPrice()); //获取购物车中的数量,参数squ

shopCart.findItem();//根据sku标示查找商品,参数squ

//如果木有提供sku,则返回所有的item

shopCart.getItemIndex('aa') //获取item在items的数组下标,参数squ

shopCart.updateQuantity(a) //更新商品的数量,参数item

shopCart.getTotalCount()//获取购物车商品的数量,如果传某个商品的id,那么就返回该商品的数量,参数squ

</script>

</body>

</html>

以上是 js实现购物车功能 的全部内容, 来源链接: utcz.com/z/360940.html

回到顶部