JS实现服务五星好评

Wenda ·
更新时间:2024-11-13
· 1851 次阅读

本文实例为大家分享了JS实现服务五星好评的具体代码,供大家参考,具体内容如下

html部分

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title> </head> <body>     <script type="module">         import Star from "./js/Star.js";         document.addEventListener(Star.STAR_SELECTED_EVENT,starSelectedHandler);         let  star=new Star("服务评价");         star.position=2;         star.bool=true;         star.appendTo(document.body);         let  star1=new Star("售后评价")         star1.appendTo(document.body);         function starSelectedHandler(e){             console.log(e.position,e.content);         }     </script> </body> </html>

js Star.js部分

import Utils from "./Utils.js"; export default class Star{     static STAR_SELECTED_EVENT="star_selected_Event";     constructor(content,bool){         // this就是new出的对象         this.arr=[];         this.position=-1;         this.bool=bool;         this.elem=this.createElem(content);     }     createElem(content){         if(this.elem) return this.elem;         let div=Utils.ce("div",{             height:"35px",             position:"relative"         });         let label=Utils.ce("label",{             fontSize:"16px",             marginRight: "10px",             display:"inline-block",             marginTop: "18px",         },{             textContent:content         });         div.appendChild(label);         for(let i=0;i<5;i++){             let span=Utils.ce("span",{                 display: 'inline-block',                 width:"16px",                 height:"16px",                 marginTop: "18px",                 backgroundImage:"url(./img/commstar.png)"             });             this.arr.push(span);             div.appendChild(span);         }         this.face=Utils.ce("span",{             display:"none",             position:"absolute",             width:"16px",             height:"16px",             backgroundImage:"url(./img/face-red.png)",             backgroundPositionX:"0px",             top:"0px"         });         div.appendChild(this.face);         // 原本事件函数中的this是被侦听的对象,现在通过箭头函数,this重新指回当前实例化对象         div.addEventListener("mouseover",e=>{             this.mouseHandler(e);         });         div.addEventListener("mouseleave",e=>{             this.mouseHandler(e);         });         div.addEventListener("click",e=>{             this.clickHandler(e);         })         return div;     }     appendTo(parent){         parent.appendChild(this.elem);     }     mouseHandler(e){         if(this.bool) return;         // e.currentTarget         var num=this.arr.indexOf(e.target);         if(e.type==="mouseover"){             if(e.target.constructor!==HTMLSpanElement) return;             this.setStar(index=>{                 return index<=num || index<=this.position;             })             Object.assign(this.face.style,{                 backgroundPositionX:-(this.arr.length-num-1)*20+"px",                 left:e.target.offsetLeft+"px",                 display:"block"             })         }else if(e.type==="mouseleave"){             this.setStar(index=>{                 return index<=this.position;             })             this.face.style.display="none"         }     }     clickHandler(e){         if(this.bool) return;         if(e.target.constructor!==HTMLSpanElement) return;         this.position=this.arr.indexOf(e.target);         // 当使用回调函数时,this被重新指向,因此我们需要使用箭头函数重新将this指向实例化的对象        this.setStar(index=>{            return index<=this.position;        });        let evt=new Event(Star.STAR_SELECTED_EVENT);        evt.position=this.position;        evt.content=this.elem.firstElementChild.textContent;        document.dispatchEvent(evt);     }     setStar(fn){         for(let i=0;i<this.arr.length;i++){             if(fn(i)){                 this.arr[i].style.backgroundPositionY="-16px";             }else{                 this.arr[i].style.backgroundPositionY="0px";             }         }     } }

js Utils.js部分

export default class Utils {     static IMG_LOAD_FINISH = "img_load_finish";     constructor() {     }     static ce(type, style, prop) {         let elem = document.createElement(type);         if (style) Object.assign(elem.style, style);         if (prop) Object.assign(elem, prop);         return elem;     }     static randomColor() {         let c = "#";         for (let i = 0; i < 6; i++) {             c += Math.floor(Math.random() * 16).toString(16);         }         return c;     }     static random(min, max) {         return Math.floor(Math.random() * (max - min) + min);     }     static loadImgs(imgList, baseUrl, handler, type) {         let img = new Image();         img.addEventListener("load", Utils.loadHandler);         let url = Utils.getImgUrl(imgList[0], baseUrl, type);         img.src = url;         img.imgList = imgList;         img.baseUrl = baseUrl;         img.handler = handler;         img.type = type;         img.list = [];         img.num = 0;     }     static loadHandler(e) {         let img = this.cloneNode(false);         this.list.push(img);         this.num++;         if (this.num > this.imgList.length - 1) {             this.removeEventListener("load", Utils.loadHandler);             if (this.handler) {                 this.handler(this.list);                 return;             }             let evt = new Event(Utils.IMG_LOAD_FINISH);             evt.list = this.list;             document.dispatchEvent(evt);             return;         }         this.src = Utils.getImgUrl(this.imgList[this.num], this.baseUrl, this.type);     }     static getImgUrl(name, baseUrl, type) {         let url = "";         if (baseUrl) url += baseUrl;         if (type) {             if (name.indexOf(".") < 0) name += "." + type;             else name = name.replace(/\.\w+$/, "." + type);         }         url += name;         return url     } }



js实现 js

需要 登录 后方可回复, 如果你还没有账号请 注册新账号