JS如何实现五星好评效果
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章给大家分享的是有关JS如何实现五星好评效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用JS实现面向对象方法实现京东的五星好评效果。鼠标滑过时的显示:当评价完成后
千家信息网最后更新 2025年02月16日JS如何实现五星好评效果
这篇文章给大家分享的是有关JS如何实现五星好评效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
用JS实现面向对象方法实现京东的五星好评效果。
鼠标滑过时的显示:
当评价完成后,关闭浏览器重新打开页面,还是上次的评价结果。用cookie实现。
具体实现如下:
import Componenet from "./Component.js"; export default class Stars extends Componenet { label; STARS_NUM = 5; starArr = []; score = 0; starsCon; faceIcon; scoreCon; index = -1; name; static STARS_LIST={}; //存储当前页面中所有的五星评价结果,一个商品为一组。用商品的id作为key,用商品评价组成一个数组,作为value。 date=new Date(); constructor(_label,_name) { super("div"); this.name=_name; this.label = _label; Object.assign(this.elem.style, { width:"200px", height: "16px", float: "left", marginRight: "20px", marginBottom: "10px", fontSize: "12px", color: "#666", lineHeight: "16px", userSelect: "none", position: "relative", top: "20px", left: "20px", }) // 解析cookie中存储的评论结果并在创建每个评论时初始化score的值。 this.initScore(); // 创建评价标签部分 this.createLabel(); // 创建星星部分 this.createStars(); // 创建分数部分 this.createScore(); // 初始化星星样式。 this.changeStarStyle(this.score-1); // 初始化分数 this.changeScore(this.score); // 添加鼠标滑过点击事件。 this.starsCon.addEventListener("mouseenter", e => this.mouseHandler(e)); this.starsCon.addEventListener("mouseleave", e => this.mouseHandler(e)); this.starsCon.addEventListener("mouseover", e => this.mouseHandler(e)); this.starsCon.addEventListener("click", e => this.clickHandler(e)); this.date.setFullYear(2021); } appendTo(_parent){ super.appendTo(_parent); if(!Stars.STARS_LIST[this.name]) Stars.STARS_LIST[this.name]=[]; Stars.STARS_LIST[this.name].push(this.label+"="+this.score); } clickHandler(e){ if(e.target.constructor!==HTMLLIElement) return this.index = this.starArr.indexOf(e.target); this.score = this.index+1; this.changeStarStyle(this.index); this.changeScore(this.index+1); // 每次点击都将评论的结果存储到cookie中,以便下次打开页面时读取。STARS_LIST中存储的是label作为key,score作为value的数据。 this.storageScore(); } storageScore(){ for(let prop in Stars.STARS_LIST){ if(prop === this.name){ Stars.STARS_LIST[prop].forEach((item,index)=>{ if(item.includes(this.label)) Stars.STARS_LIST[prop][index] = this.label+"="+this.score; }); } } [xss_clean]="comment="+ JSON.stringify(Stars.STARS_LIST)+";expires="+this.date.toUTCString(); } mouseHandler(e) { switch (e.type) { case "mouseenter": this.faceIcon.style.display = "block"; break; case "mouseleave": this.faceIcon.style.display = "none"; this.changeStarStyle(this.index); this.changeScore(this.score); break; case "mouseover": let index = this.starArr.indexOf(e.target); this.changeStarStyle(index); this.changeScore(index + 1); this.changeFaceStyle(index); break; } } changeStarStyle(_i) { for (let n = 0; n < this.starArr.length; n++) { if (n <= _i || n < this.score) { this.starArr[n].style.backgroundPositionY = "-16px"; } else { this.starArr[n].style.backgroundPositionY = "0px"; } } } changeFaceStyle(_i) { this.faceIcon.style.left = _i * 16 + "px"; this.faceIcon.style.backgroundPositionX = (_i + 1) * 20 + "px"; } changeScore(_i) { this.scoreCon.textContent = _i + "分"; } createLabel() { let label = document.createElement("span"); Object.assign(label.style, { float: "left", padding: "0 5px", }) label.textContent = this.label; this.elem.appendChild(label); } createStars() { this.starsCon = document.createElement("ul"); Object.assign(this.starsCon.style, { margin: 0, padding: 0, listStyle: "none", width: "80px", height: "16px", float: "left", position: "relative", }) for (let i = 0; i < this.STARS_NUM; i++) { let li = document.createElement("li"); Object.assign(li.style, { width: "16px", height: "16px", float: "left", backgroundImage: "url(./star_img/commstar.png)", }) this.starArr.push(li); this.starsCon.appendChild(li); } this.faceIcon = document.createElement("div"); Object.assign(this.faceIcon.style, { width: "16px", height: "16px", backgroundImage: "url(./star_img/face-red.png)", backgroundPositionX: "-80px", position: "absolute", left: "0", top: "-16px", display: "none", }) this.starsCon.appendChild(this.faceIcon); this.elem.appendChild(this.starsCon); } createScore() { this.scoreCon = document.createElement("div"); Object.assign(this.scoreCon.style, { height: "16px", width:"20px", float: "left", padding: "0 5px", }) this.scoreCon.textContent = this.score + "分", this.elem.appendChild(this.scoreCon); } initScore(){ // 直接读取cookie显示如下 // comment={"1001":["商品符合度=5","店家服务态度=0","快递配送速度=0","快递员服务=0","快递包装=0"],"1002":["商品符合度=0","店家服务态度=0","快递配送速度=0","快递员服务=0","快递包装=0"]} // 解析cookie中存储的评论结果。 if(![xss_clean].includes("comment=")) return let o = JSON.parse([xss_clean].match(/(\{.*?\})/)[1]); if(!o) return // 解析后的o如下 // ["商品符合度=1", "店家服务态度=0", "快递配送速度=0", "快递员服务=0", "快递包装=0"] for(let prop in o){ if(this.name===prop){ this.score=o[prop].reduce((value,item,index)=>{ let arr=item.split("="); if(arr[0].includes(this.label)) value=parseInt(arr[1]); return value; },0) } } }}
使用时传入标签,新建实例。
import Stars from './js/Stars.js';let list=["商品符合度","店家服务态度","快递配送速度","快递员服务","快递包装"]; // let star = new Stars(list[0]); // star.appendTo("body"); list.forEach(item=>{ // 传入标签和对应的商品id let star = new Stars(item,"1001"); star.appendTo(".div1"); }) list.forEach(item=>{ let star = new Stars(item,"1002"); star.appendTo(".div2"); })
感谢各位的阅读!关于"JS如何实现五星好评效果"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
商品
评价
五星
结果
存储
好评
效果
标签
部分
页面
快递
评论
内容
分数
星星
更多
篇文章
鼠标
服务
不错
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
民航网络安全预测
电网数据库设计方案
服务器制造企业管理
奇安信网络安全服务
刺激战场现在什么服务器好
央美设计手绘网络安全
网络安全负载均衡厂商
网络安全与科技创新
网络安全随堂测试答题
Gov平台管理服务器
菜鸟网络技术面试
杨浦区品牌软件开发常见问题
新建一个orcl数据库
虹口区网络技术服务咨询口碑推荐
软件开发 人月多少钱
交换机网络技术群
斯坦福基因芯片数据库
三级网络技术重点
网络安全问题种类多
德宿互联网科技有限公司
遗孀神山要去哪个服务器
测试服务器是什么东西
同花顺数据库怎么找市场日收益率
数据库雨课堂课后习题
电子商务的网络技术论文
各级政府做好网络安全
linux新装数据库创建表
深圳华辰软件开发 培训
北航网络安全研究生学院
服务器账号密码忘了怎么找回