五星评论(面向对象)

在这里插入图片描述

faceRed.js
class FaceRed{
    constructor(label,parent){//初始化
        this.faceRed=this.initFaceRed(label,parent);
        this.spanList=Array.from(this.faceRed.querySelectorAll(".redStar"));
        this.position=-1;
    }
    initFaceRed(_label,parent){
        if(this.faceRed) return this.faceRed;
        if(!parent) parent=document.body;
        let div=document.createElement("div");
        Object.assign(div.style,{
            paddingTop:"20px",
            float:"left",
            marginLeft:"10px"
        });
        let labelElem=document.createElement("label");
        labelElem.textContent=_label;
        div.appendChild(labelElem);
        Object.assign(labelElem.style,{
            float: "left",
            marginRight:"5px"
        });
        for(let i=0;i<5;i++){
            let span=this.createRed();
            span.className="redStar";
            div.appendChild(span);
        }
        let clear=document.createElement("a");
        Object.assign(clear.style,{
            display: "block",
            visibility: "hidden",
            opacity: 0,
            height: 0,
            clear: "both",
            zoom:1
        });
        div.appendChild(clear);
        parent.appendChild(div);
        div.self=this;
        div.addEventListener("mouseover",this.mouseHandler);
        div.addEventListener("mouseout",this.mouseHandler);
        div.addEventListener("mouseleave",this.mouseLeaveHandler);
        div.addEventListener("click",this.clickHandler);
        return div;
    }
    createRed(){
        let span=document.createElement("span");
        Object.assign(span.style,{
            display: "block",
            float: "left",
            width: "16px",
            height: "16px",
            background: "url('img/commstar.png') 0 0",
            marginTop: "3px",
            cursor: "pointer"
        });
        let face=document.createElement("span");
        Object.assign(face.style,{
            display: "none",
            width: "16px",
            height: "16px",
            background: "url('img/face-red.png') 0 0",
            marginTop: "-18px",
        });
        face.className="faceReds";
        span.appendChild(face);
        return span;
    }
    mouseHandler(e){
        if(e.target.constructor!==HTMLSpanElement) return;
        if(e.target.className==="faceReds")return;
        let index=this.self.spanList.indexOf(e.target);
        if(e.type==="mouseover"){
            if(index>this.self.position){
                this.self.setStarRed(index);
            }else{
                this.self.setStarRed(this.self.position);
            }
            e.target.firstElementChild.style.display="block";
            e.target.firstElementChild.style.backgroundPositionX=-(4-index)*20+"px";
        }else if(e.type==="mouseout"){
            e.target.firstElementChild.style.display="none";
        }
    }
    mouseLeaveHandler(e){
        this.self.setStarRed(this.self.position)
    }
    clickHandler(e){
        if(e.target.constructor!==HTMLSpanElement) return;
        this.self.position=this.self.spanList.indexOf(e.target);
    }
    setStarRed(index){
        for(let i=0;i<this.spanList.length;i++){
            if(i<=index){
                this.spanList[i].style.backgroundPositionY="-16px";
                continue;
            }
            this.spanList[i].style.backgroundPositionY="0px";
        }
    }

}

2.Html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/faceRed.js"></script>

</head>
<body>
    <script>
        let face=new FaceRed("快速包装");
        let face1=new FaceRed("快递服务");
        let face2=new FaceRed("送货上门");
        let face3=new FaceRed("面向对象");
//        Stylesheet
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值