1:首頁 1,靜態html5+css做好基本樣式 html5,css,jQery, sass 2,jsonp的方式src引入模擬的json數據//這裡用的jsonp方式拿數據,詳情有使用ajax 遍歷json數據: 2:跳轉詳情 關鍵:indexOf,continue ajax js //首頁給a標 ...
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();
})
}
});