五星好評--cookie儲存上一次點選的資料
思路
1.在哪裡儲存資料到cookie中
2.如何處理cookie資料
3.cookie資料回顯
import Component from "./Component.js";
export default class Star extends Component {
static STAR_NUM = 5;
label = "";
starCon;
face;
score;
pos = -1;
starArr = [];
static StarScoreList = {};
constructor(_label) {
super();
this.label = _label;
Object.assign(this.elem.style, {
width: "auto",
float: "left",
height: "16px",
paddingBottom: "10px",
marginRight: "20px",
paddingTop: "16px"
})
Star.StarScoreList[_label] = 0;
this.createLabel(_label);
this.createStar();
this.createScore();
//初始化顯示
this.useCookie();
}
//使用cookie資料來回顯頁面資料
//1.判斷初始值,如果不存在cookie資料時,則不使用cookie
//2.當cookie有資料時,用cookie資料回顯
useCookie() {
var obj = this.getCookie();
if (obj[this.label + "_score"] !== 0 && !isNaN(obj[this.label + "_score"])) {
this.changeStar(Number(obj[this.label + "_score"]) - 1);
this.changeScore(obj[this.label + "_score"]);
//記錄點選的位置,防止頁面重新整理
this.pos = Number(obj[this.label + "_score"]) - 1;
}
}
createLabel(_label) {
let labels = document.createElement("span");
labels.textContent = _label;
Object.assign(labels.style, {
float: "left",
height: "16px",
lineHeight: "16px",
marginRight: "10px",
overflow: "hidden",
whiteSpace: "nowrap",
textOverflow: "ellipsis",
font: '12px/150% tahoma,arial,Microsoft YaHei,Hiragino Sans GB,"\u5b8b\u4f53",sans-serif',
color: "#666"
});
this.elem.appendChild(labels);
}
createStar() {
this.starCon = document.createElement("div");
Object.assign(this.starCon.style, {
float: "left",
height: "16px",
position: "relative",
marginTop: "1px"
})
for (let i = 0; i < Star.STAR_NUM; i++) {
let star = document.createElement("div");
Object.assign(star.style, {
width: "16px",
height: "16px",
float: "left",
backgroundImage: "url(./img/commstar.png)",
})
this.starArr.push(star);
this.starCon.appendChild(star);
}
this.starCon.addEventListener("mouseover", e => this.mouseHandler(e));
this.starCon.addEventListener("click", e => this.mouseHandler(e));
this.starCon.addEventListener("mouseleave", e => this.mouseHandler(e));
this.face = document.createElement("div");
Object.assign(this.face.style, {
width: "16px",
height: "16px",
backgroundImage: "url(./img/face-red.png)",
position: "absolute",
top: "-16px",
display: "none"
})
this.starCon.appendChild(this.face);
this.elem.appendChild(this.starCon);
}
createScore() {
this.score = document.createElement("span");
Object.assign(this.score.style, {
position: "relative",
width: "30px",
height: "16px",
top: "-2px",
marginLeft: "10px",
lineHeight: "16px",
textAlign: "right",
color: "#999",
font: '12px/150% tahoma,arial,Microsoft YaHei,Hiragino Sans GB,"\u5b8b\u4f53",sans-serif',
});
this.score.textContent = "0分";
this.elem.appendChild(this.score);
}
mouseHandler(e) {
switch (e.type) {
case "click":
case "mouseover":
let index = this.starArr.indexOf(e.target);
if (index < 0) return;
if (e.type === "click") {
this.pos = index;
this.dispatch();
//記錄點選時資料,儲存在cookie中,以this.label + "_score=" + this.score.textContent形式儲存
document.cookie = this.label + "_score=" + this.score.textContent;
}
else {
this.changeScore(index + 1);
this.changeFace(index);
}
this.changeStar(index);
break;
case "mouseleave":
this.changeStar(this.pos);
this.changeScore(this.pos + 1);
this.changeFace(-1);
break;
}
}
changeStar(n) {
for (var i = 0; i < this.starArr.length; i++) {
if (i <= n || i <= this.pos) {
this.starArr[i].style.backgroundPositionY = "-16px";
} else {
this.starArr[i].style.backgroundPositionY = "0px";
}
}
}
changeScore(n) {
this.score.textContent = n + "分";
if (n === 0) {
this.score.style.color = "#999";
} else {
this.score.style.color = "#e4393c";
}
}
changeFace(n) {
if (n < 0) {
this.face.style.display = "none";
return
}
var index = Star.STAR_NUM - n - 1
this.face.style.display = "block";
this.face.style.backgroundPositionX = -index * 20 + "px";
this.face.style.left = this.starArr[n].offsetLeft + "px";
}
dispatch() {
Star.StarScoreList[this.label] = this.pos + 1;
var evt = new Event("change");
evt.score = this.pos + 1;
evt.label = this.label;
evt.scoreList = Star.StarScoreList;
this.dispatchEvent(evt);
}
/**
* 將點選時儲存的cookie取出, 返回物件列表
*/
getCookie() {
if (document.cookie.length == 0) return {};
return document.cookie.split(";").reduce((value, item) => {
var arr = item.split("=");
value[arr[0].trim()] = arr[1].split("分")[0].trim();
return value;
}, {})
}
}
相關文章
- 利用cookie做五星好評Cookie
- 面對物件五星好評物件
- 超越 Cookie:當今的客戶端資料儲存技術Cookie客戶端
- js+css+php實現點選五星進行評分JSCSSPHP
- 鴻蒙HarmonyOS實戰-Web元件(Cookie及資料儲存)鴻蒙Web元件Cookie
- 如何延長儲存伺服器上資料的儲存時間?伺服器
- 記錄一次資料儲存出錯
- 私有云對資料儲存環境的好處
- session儲存資料庫中以及禁用cookie情況下的處理Session資料庫Cookie
- 【儲存資料恢復】儲存上的raid5陣列崩潰的資料恢復案例資料恢復AI陣列
- 企業雲盤,資料儲存的必要選擇
- 資料儲存--檔案儲存
- Ubuntu 上更改 MySQL 資料庫資料儲存目錄UbuntuMySql資料庫
- 在雲伺服器儲存資料的10個好處伺服器
- 資料庫儲存選型經驗總結資料庫
- 資料儲存(1):從資料儲存看人類文明-資料儲存器發展歷程
- Android中的資料儲存之檔案儲存Android
- 聚焦資料時代新儲存需求,浪潮儲存的新儲存之道
- iOS全埋點解決方案-資料儲存iOS
- 【儲存資料恢復】NetApp儲存誤刪資料夾的資料恢復案例資料恢復APP
- 前端儲存技術Cookie,Storage,IndexedDB前端CookieIndex
- 資料的儲存區域
- 有效儲存資料的方法
- TiDB資料儲存TiDB
- 資料儲存:CoreData
- iOS 資料儲存iOS
- 【伺服器儲存裝置資料恢復】EMC儲存裝置POOL上的資料卷被刪除的資料恢復案例伺服器資料恢復
- iOS開發資料儲存篇—iOS中的幾種資料儲存方式iOS
- 【儲存資料恢復】NetApp儲存誤刪除的資料恢復案例資料恢復APP
- 五星好評!基於uniapp開發的開源專案推薦APP
- 資料儲存加密的主流方案對比與難點解析加密
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 資料儲存(歸檔解檔,沙河儲存)
- 五星好評!這門Python神作刷爆朋友圈Python
- 雲上大資料儲存:探究 JuiceFS 與 HDFS 的異同大資料UI
- Android的3種資料儲存技術(一)File儲存Android
- Kubernetes 遷移節點 Kubelet 資料儲存目錄
- 伺服器資料儲存,需注意這幾點!伺服器