JS如何实现五星好评效果
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关JS如何实现五星好评效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用JS实现面向对象方法实现京东的五星好评效果。鼠标滑过时的显示:当评价完成后
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
互联网科技有限公司
与互联网科技公司
互联网科技的发展
互联网科技股票
美国互联网黑科技
融势互联网科技
互联网科技汛
天扬科技互联网广告
深圳互联网科技怎么样
以后互联网后是啥科技
昊天互联网科技有限公司
坤平互联网科技
西安小鹰速贷互联网科技有限公司
科技大学互联网
上海钢联属于互联网科技股吗
互联网企业科技类企业如何做账
互联网科技年终奖
互联网风格科技公司名称
互联网科技对化妆品行业
北京瑞云互联网科技有限公司
广州淘业互联网络科技
科技互联网企业
互联网金融与金融科技
互联网 的科技创新
互联网科技logo设计
润盈互联网科技
互联网高科技股票
湖南洣水互联网科技有限公司扣款
卓翼科技产业互联网合作
互联网高科技行业有哪些企业