1:首页

  • 1,静态html5+css做好基本样式

html5,css,jQery, sass

  • 2,jsonp的方式src引入模拟的json数据//这里用的jsonp方式拿数据,详情有使用ajax

遍历json数据:


let data = like['msg']; //获取json数据列表
let like_lists = document.querySelector('.like_lists'); //获取ul便签 //通过循环遍历出后台收据,每循环一次就通过js的dom生成节点,依次插入标签中。并附上类名与id。

2:跳转详情 ajax异步请求

  • 关键:indexOf,continue ajax

//首页给a标签绑定一个宝贝的唯一id,点击跳转详情页,通过herf发送这条数据
a1.href = `./front/pages/detail_page.html?id=${itemId}`; //详情接受地址数据
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) return unescape(r[2]);
return null; //返回参数值
}
//ajax请求json数据,indexOf判断列表是否包含次数据。
for (let i = 0; i < data.msg.length; i++) {
// let data = xq['msg'][i]['itemId'];
if (data.msg[i]['itemId'].indexOf(id) === -1) { /不包含id
continue; //跳出 //多个
//如果不包含就跳出,不打印。*注意要添加循环列表的索引值i
}
}

3:详情页遍历

  • 使用到 jQuery sass gulp

主图部分,小盒子里的图片,通过循环给每个img的src更换图片。当鼠标移入小盒子里时,大盒子和放大镜里img的src更换成小盒子里的src。


for (let i = 0; i < imgBtn.length; i++) {
imgBtn[i].onmouseover = function() {
oBig.children[0].src = imgBtn[i].childr.src;
oSmall.children[0].src = imgBtn[i].chi[0].src;
}
} let imgBtn = document.querySelectorAll('.samll_box'); //5个小盒子
let oSmall = document.getElementById('oSmall'); //盒子 里面有img
let oBig = document.getElementById('oBig');
oSmall.children[0].src = imgBtn[0].children[0].src;//默认5小盒子里的第一个展示在大盒子上

4:登录 注册 页面 模块化

  • 使用到 PHP mysql jQuery sass gulp ajax localStorage

注册:

  • 使用到jQuery插件,方便获取标签,而且它的选择器很方便。
  • 当鼠标获取input焦点时触发focus事件,提示按正则要求输入
  • 鼠标离开时触发blur事件,判断inpu的val()是否为空,是否满足正则条件,如果条件符合正则要求切不为空则提示,该用户名可注册
  • 点击注册时,ajax提交后台,如果该用户名已别注册则返回一个提示"该用户名已被注册"
  • 注册完成后,使用setTimeout()延迟3s打开登录界面

登录:

  • 使用到jQuery插件,方便获取标签,而且它的选择器很方便。
  • 构造函数,通过prototype继承方法 ,触发登录事件时,执行函数。判断用户名与密码是否正确
  • 登录成功,将用户名保存本地,并跳转首页

localStorage.setItem("username", $('#username').val());
  • 首页跳转加载时onload触发下面的函数获取登录成功时保存本地的用户名,并展示

load_data() {
var theme = localStorage.getItem("username");
if (theme == null || theme == "") {
$('.login_show').hide();
$('.unlogin').show(); } else {
$('.login_show').show().children('.login_name').text(theme).css('color', 'red')
$('.unlogin').hide();
} }
  • 点击退出时,触发函数,清除本地用户名和load_data()函数,刷新局部

exitu() {
localStorage.removeItem("username");
//刷新部分
this.load_data();
}

5:添加购物车思路

  • 使用到 jQuery sass gulp ajax cookie

  • 点击详情页 购物车 触发事件。执行函数,将次宝贝id存入cookie保存,并提示添加购物车完成

  • 当用户点击 进入购物车 按钮。触发事件,执行函数,将cookie的value值遍历出来,同ajax异步请求json文件,indexOf判断筛选。将包含的商品价格 图片 展示与页面。

  • 编写计算器。进行数量 ,价格计算.

注意点:

最后会与结算的计算器调用的函数必须要在ajax里面写或者调用,不然获取不了那些生成的元素,从而得不到里面的数据!


购物车进阶版本

  • 上面思路,触发加入购物车事件后,商品直接存入cookie,没有与用户名绑定,用户体验度极差。以下是用户与商品id绑定思路!

字典对象方法

var dic={
admin:[1,2,3],
nihaoya:[4,5,6]
}
// 1、获取本地json串 -- String str = Local.getItem("one");"{admin:["1","2","3"],  admin1:[shopcar],admin2:[]}"
// 2、把json串转换成字典 -- Map dic = JSONObject.parse(str); {admin:["1","2","3"],admin1:[shopcar],admin2:[]}
// 3、获取自己的购物车数据 -- List shopCar = dic[admin]; ["1","2","3"]
// 4、把需要添加到购物车的商品赋值给shopCar -- shopCar.add(data);["1","2","3","4"]
// 5、把dic转换成json -- String json = JSONObject.toJSONString(dic); {admin:["1","2","3"],admin1:[shopcar],admin2:[]}"
// 6、保存json到本地 -- Local.saveItem("one",dic);
var locaname = localStorage.getItem('username');
var li = []; //购物车
var dictionary = {}; //创建一个空对象
if (!getCookie(0)) {
// li = dictionary[locaname];
if (dictionary[locaname] === undefined) {
dictionary[locaname] = li; } else {
var dic = JSON.parse(getCookie(0));cookie 并解析
// li = dic[locaname]; //将对应字典里key的v值给自己的购物车
if (dic[locaname] !== undefined) {
li = dic[locaname];
}
} if (!getCookie(0)) { li.push(data.msg[i]['itemId']);
dictionary[locaname] = li;
var dobj = JSON.stringify(dictio } else { li.push(data.msg[i]['itemId']);
dic[locaname] = li;
var dobj = JSON.stringify(dic); } // li.push(data.msg[i]['itemId']);
// setCookie(i, data.msg[i]['itemId'
setCookie(0, dobj, 7);
  • 注意点:函数执行开始时,判断cookie是否有上一次存储的值,如果有,就赋值给dic,如果没有就得声明一个空对象,然后将list赋值给它!触发事件时也需要判断。存储json,读取时相同名。


$.ajax({
//请求方式为get
type: "GET",
//json文件位置
url: "../../data/xqq.json",
//返回数据格式为json
dataType: "json",
//请求成功完成后要执行的方法 success: function (data) { // console.log(dictionary[locaname]);
// 1、获取本地数据dictionary {name1:[shopcar],name2:[]}
// 2、获取自己的购物车数据 dictionary[locaname]
// 3、赋值给一个list var li=dictionary[locaname]
// 4、list插入需要加入到购物车的数据 li。add(data)
// 5、把list赋值给自己的购物车数据 dictionary[locaname]=li
// 6、保存dictionary local。save // 1、获取本地json串 -- String str = Local.getItem("one"); "{admin:["1","2","3"],admin1:[shopcar],admin2:[]}"
// 2、把json串转换成字典 -- Map dic = JSONObject.parse(str); {admin:["1","2","3"],admin1:[shopcar],admin2:[]}
// 3、获取自己的购物车数据 -- List shopCar = dic[admin]; ["1","2","3"]
// 4、把需要添加到购物车的商品赋值给shopCar -- shopCar.add(data); ["1","2","3","4"]
// 5、把dic转换成json -- String json = JSONObject.toJSONString(dic); "{admin:["1","2","3"],admin1:[shopcar],admin2:[]}"
// 6、保存json到本地 -- Local.saveItem("one",dic); var locaname = localStorage.getItem('username');
var li = []; //购物车
var dictionary = {}; //创建一个空对象 存数据 if (!getCookie(0)) {
// li = dictionary[locaname];
if (dictionary[locaname] === undefined) {
dictionary[locaname] = li;
} } else {
var dic = JSON.parse(getCookie(0)); //获取cookie 并解析
// li = dic[locaname]; //将对应字典里key的value赋值给自己的购物车
if (dic[locaname] !== undefined) {
li = dic[locaname];
}
} for (let i = 0; i < data.msg.length; i++) {
// let data = xq['msg'][i]['itemId']; if (data.msg[i]['itemId'].indexOf(id) === -1) { //data不包含id
continue; //跳出 //多个
//如果不包含就跳出,不打印。*注意要添加循环列表的索引值i
}
// 遍历详情页
// console.log(data.msg[i]['goods_gallery_urls'][2]);
for (let a = 0; a < 5; a++) {
let img1 = document.createElement('img');
img1.className = 'img11';
img1.src = data.msg[i]['goods_gallery_urls'][a]
imgBox[a].appendChild(img1)
}
// 标题
let productMainName = document.getElementById('productMainName');
productMainName.innerHTML = data.msg[i]['goods_name'];
// 提示
let buy21 = document.getElementById('buy21');
buy21.innerHTML = data.msg[i]['goods_desc']; let goods_eval_score = document.getElementById('goods_eval_score');
goods_eval_score.innerHTML = data.msg[i]['payPoint']; let category_id = document.getElementById('category_id');
category_id.innerHTML = data.msg[i]['srcPoint'] // 店名
$('.store_name').text(data.msg[i]['mall_name']); // 点击触发事件存储本地
$('.store_car').click(() => { if (!getCookie(0)) { li.push(data.msg[i]['itemId']);
dictionary[locaname] = li;
var dobj = JSON.stringify(dictionary); } else {
li.push(data.msg[i]['itemId']);
dic[locaname] = li;
var dobj = JSON.stringify(dic); } // li.push(data.msg[i]['itemId']);
// setCookie(i, data.msg[i]['itemId'], 7); setCookie(0, dobj, 7); alert('加入购物车成功,付款请进入购物车') }) } // dictionary[locaname] = [dakhadsdhksa, adajksjlkads, 3] // var a = ['sas', 'sa']
// a.push('assa')
// dictionary[locaname] = a; // var keys = [];
// dictionary.locaname = [12, 32, 54]
// for (var key in dictionary) {
// keys.push(key);
// }
// dictionary["locaname"].push(77); // console.log(dictionary); // 详情主图
let imgBtn = document.querySelectorAll('.samll_box'); //5个小盒子
let oSmall = document.getElementById('oSmall'); //获取盒子 里面有img
let oBig = document.getElementById('oBig'); oSmall.children[0].src = imgBtn[0].children[0].src; //默认5小盒子里的第一个展示在大盒子上 for (let i = 0; i < imgBtn.length; i++) {
imgBtn[i].onmouseover = function () {
oBig.children[0].src = imgBtn[i].children[0].src;
oSmall.children[0].src = imgBtn[i].children[0].src;
}
} }
});
});
//购物车js

 $.ajax({
type: "GET",
// url: "../../data/like_like.json",
url: "../../data/like_like.json",
data: "data",
dataType: "json",
success: function(response) {
let username = localStorage.getItem('username'); //本地名 let dic = JSON.parse(getCookie(0)); //json对象
console.log(dic); var keys = []; //遍历dic长度 for (var key in dic) {
keys.push(key);
} if (keys.indexOf(username) == -1) {
$('.rember').show();
$('.pay').hide(); } else {
$('.pay').show(); let lkel = response.msg.length; // strc.length
// dic[username].length //当前用户名里面的value值 for (let a = 0; a < dic[username].length; a++) { //循环遍历value值 // var arr = strc[a].split('=')[1] //arr=cookie的
var arr = dic[username][a]; for (let i = 0; i < lkel; i++) { //循环遍历json文件
if (response.msg[i]['itemId'].indexOf(arr) === -1) { //json文件里是否包含dic[username]里面的value
continue;
}
// console.log(response.msg[i]['nick']);
// console.log(response.msg[i]['icon']); let li1 = document.createElement('li');
li1.className = 'carlis';
$('.shop_lis').append(li1);
let img1 = document.createElement('img');
img1.src = response.msg[i]['icon'];
img1.className = 'goods_img'; li1.append(img1); let p1 = document.createElement('p');
p1.innerHTML = response.msg[i]['title'];
li1.append(p1);
// var p1 = $("<p></p>").text(response.msg[i]['title']); let div1 = document.createElement('div');
div1.className = 'goods_bottom';
div1.innerHTML = '¥';
li1.append(div1); let span1 = document.createElement('span');
span1.className = 'goods_price';
span1.innerHTML = response.msg[i]['srcPoint']; div1.append(span1) let div_num = document.createElement('div');
div_num.className = 'num';
div1.append(div_num); let div_minus = document.createElement('div');
let div_plus = document.createElement('div');
let span2 = document.createElement('span');
div_minus.innerHTML = '-';
div_plus.innerHTML = '+';
span2.innerHTML = '0';
div_minus.className = 'minus';
div_plus.className = 'plus'; div_num.append(div_minus);
div_num.append(span2);
div_num.append(div_plus); } }
} $(".plus").click(function() {
var num = $(this).parent().children("span");
//单品数量增加 num.text(parseInt(num.text()) + 1);
//商品总数增加
var totalNum = parseInt($(".totalNum").text());
totalNum++
$(".totalNum").text(totalNum);
//计算总价
var goods_price = parseFloat($(this).parent().parent().children(".goods_price").text());
$(".totalPrice").text(parseFloat($(".totalPrice").text()) + goods_price);
}); //点击减少按钮触发事件
$(".minus").click(function() {
var num = $(this).parent().children("span");
if (parseInt(num.text())) {
num.text(parseInt(num.text()) - 1);
var totalNum = parseInt($(".totalNum").text());
totalNum--
$(".totalNum").text(totalNum);
var goods_price = parseFloat($(this).parent().parent().children(".goods_price").text());
$(".totalPrice").text(parseFloat($(".totalPrice").text()) - goods_price);
} else {
num.text("0");
} // console.log(parseInt(num.text())); }); //点击付款
$('#pay_money').click(() => {
console.log($('.totalPrice').text()); if ($('.totalPrice').text() === '00') {
alert('请输入商品数量');
} else {
$('.pay_photo').show(1000); } })
$('#pay_close').click(() => {
$('.pay_photo').hide();
}) }
});

map字典,储存cookie,切换账户,展示购物车不同商品的更多相关文章

  1. scrapy框架携带cookie访问淘宝购物车

    我们知道,有的网页必须要登录才能访问其内容.scrapy登录的实现一般就三种方式. 1.在第一次请求中直接携带用户名和密码. 2.必须要访问一次目标地址,服务器返回一些参数,例如验证码,一些特定的加密 ...

  2. <<< 网页中如何利用原生js和jquery储存cookie

    javascript当中的cookie机制,使应用达到了真正的全局变量的要求,cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由Java ...

  3. sqlserver window身份验证时切换账户的快捷键

    sqlserver window身份验证时切换账户的快捷键:ctrl+alt_del

  4. 小程序切换账户拉取仓库文件的appid提示

    小程序切换账户拉取仓库文件,拉取后appid会提示项目不是当前appid的项目,因为切换了账户,而每个小程序账户只有一个appid,所以会冲突 去project.config.json里吧appid改 ...

  5. Java基础关于Map(字典)的方法使用

    Java基础关于Map(字典)的方法使用 java中一般用map与hashmap来创建一个key-value对象 使用前提是要导入方法包: import java.util.HashMap: impo ...

  6. 第一种方式:cookie的优化与购物车实例

    一 Cookie 的优化 1.1 一般而言,我们设置cookie是在php中设置 例如: <?php setcookie('testKey1','hello world',0,'/'); //# ...

  7. ECSHOP如何解决购物车中商品自动消失问题

    最近有客户反映关于ECShop购物车的问题:需要加入多个商品到购物车时,发现之前加入到购物车的商品都自动消失了,只有最后一次加入购物车的商品在里面.那么,这是什么原因呢? 因为ECShop的SESSI ...

  8. AI学习吧-购物车-添加商品接口

    create接口流程 需求:向购物车添加商品 流程:写shopping_cart路由--->写ShoppingCart视图函数--->使用Authuser校验用户是否登录--->首先 ...

  9. Flutter实战视频-移动电商-53.购物车_商品列表UI框架布局

    53.购物车_商品列表UI框架布局 cart_page.dart 清空原来写的持久化的代码; 添加对应的引用,stless生成一个静态的类.建议始终静态的类,防止重复渲染 纠正个错误,上图的CartP ...

随机推荐

  1. gitlab 提示:remote: The project you were looking for could not be found.

    解决: git remote remove origin git remote add origin https://your_git_user_name@git.qutoutiao.net/your ...

  2. 02-C#笔记-类的定义

    /* * Notes: * 1. 标识符必须以字母.下划线或 @ 开头,后面可以跟一系列的字母.数字( 0 - 9 ).下划线( _ ).@ * */ using System; namespace ...

  3. windows10下Docker开启nginx服务访问页面没有反应

    网址不要输入localhost,而是输入docker quickstart terminal登陆成功后给你的ip地址.

  4. OpenResty: 介绍 (摘抄)

    原文链接:https://www.cnblogs.com/duanxz/p/10396160.html Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM ...

  5. debian 9 安装远程桌面

    1. 安装远程桌面服务: apt-get install xrdp 2. 修改设置文件 dpkg-reconfigure xserver-xorg-legacy  设置为anybody 3. 使用ms ...

  6. 1. Spring Cloud Greenwich SR2 概览

    Spring Cloud provides tools for developers to quickly build some of the common patterns in distribut ...

  7. Python知识点复习

    一.列表1.创建一个文件birthday.py,假设你要祝某人生日快乐!首先将年龄存储在变量age中,将姓名存储在变量name中,让程序输出类似“阿明,23岁生日快乐!” 例如:假设你要祝某人生日快乐 ...

  8. 框架Ray

    高性能最终一致性框架Ray之基本概念原理 一.Actor介绍 Actor是一种并发模型,是共享内存并发模型的替代方案. 共享内存模型的缺点: 共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且 ...

  9. SQL告警

    SQL很有必要   MySQL性能 最大数据量 最大并发数 查询耗时0.5秒 实施原则 数据表设计 数据类型 避免空值 text类型 索引优化 索引分类 优化原则 SQL优化 分批处理 不做列运算 避 ...

  10. 以前写的canvas 小游戏 贪吃蛇代码

    效果如图,完成了贪吃蛇的基本的功能 代码地址 :https://github.com/my-new-git-hub/canvasSnake.git 预览地址:https://www.kzc275.to ...