文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JS+cookie实现购物评价五星好评功能

2024-04-02 19:55

关注

本文实例为大家分享了JS+cookie实现购物评价五星好评功能的具体代码,供大家参考,具体内容如下

案例实现的是购物评价中五星点评功能.

通过JS面向对象方法实现

利用cookie实现历史点评保存的功能,在下一次打开页面仍保存上一次点评效果.

具体html,js代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="module">
    function getCookie(){
            return document.cookie.split(";").reduce((value,item,index)=>{
                var arr=item.split("=");
                var t=arr[1].trim();
                try{
                    t=JSON.parse(t);
                }catch(e){
                    t=t;
                }
                value[arr[0].trim()]=t;
                return value;
            },{})
    }
        if(document.cookie.length>0){
        var a=getCookie();
        var keys=Object.keys(a);
        console.log(a)
        console.log(keys)
        }
        var list=["用户体验","物流速度","物流服务","商家态度","商品包装"]
        import Starr from "./js/Starr.js";
        list.forEach((item,index)=>{
            let star= new Starr(item);
            star.appendTo("body");
            var index=keys.indexOf(item);
            if(index>-1){
                star.prv=a[item]-1;
                star.changeScore(a[item]-1);
                star.changestar(a[item]-1);
            }
        })
    </script>
</body>
</html>

JS代码部分:

import Component from './Component.js';
export default class Starr extends Component{
    labelCon;
    starCon;
    startArr=[];
    score;
    face;
    prv;
    index;
    static EVERYSCORE={};
    static STARTNUM=5;
    constructor(_label){
        super();
        this.label=_label;
        Object.assign(this.elem.style,{
            width: "auto",
            float: "left",
            height: "16px",
            paddingBottom: "10px",
            marginRight: "20px",
            paddingTop:"16px" 
        });
        Starr.EVERYSCORE[_label]=0;
        this.creatLabel(_label);
        this.creatStartCon();
        this.creatScore();
        this.starCon.addEventListener("mouseover",e=>this.mouseHandler(e));
        this.starCon.addEventListener("mouseleave",e=>this.mouseHandler(e));
        this.starCon.addEventListener("click",e=>this.mouseHandler(e));
        // this.elem.addEventListener("change",e=>this.changeHandler(e));
    }
    //创建label容器
    creatLabel(label){
        this.labelCon=document.createElement("span");
        Object.assign(this.labelCon.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.labelCon.textContent=label;
        this.elem.appendChild(this.labelCon);
    }
    //创建星星和笑脸的容器 starCon
    creatStartCon(){
        this.starCon=document.createElement("div");
        Object.assign(this.starCon.style,{
            float:"left",
            height:"16px",
            position:"relative",
            marginTop:"1px"
        });
        for(var i=0;i<Starr.STARTNUM;i++){
            let star = document.createElement("div");
            Object.assign(star.style,{
                width:"16px",
                height:"16px",
                float:"left",
                backgroundImage:"url(./img/commstar.png)",
            });
            this.starCon.appendChild(star);
            this.startArr.push(star)
        }
        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);
    }
    //创建分数
    creatScore(){
        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){
        //进入时
        if(e.type==="mouseover"){
            this.face.style.display="block";
            let index=this.startArr.indexOf(e.target);
            if(index<0)return;
            this.changeFace(index);
            this.changeScore(index);
            if(this.prv>index){
                this.changestar(this.prv);
            }else{
                this.changestar(index);
            }
            //离开时
        }else if(e.type==="mouseleave"){
            this.face.style.display="none";
            if(this.prv>=0){
                this.changestar(this.prv);
                this.changeScore(this.prv);
                this.changeFace(this.prv);
            }else{
                this.changestar(-1);
                this.changeScore(-1);
                this.changeFace(0);
            }
            //点击时
        }else if(e.type==="click"){
            let index=this.startArr.indexOf(e.target);
            this.prv=index;
            this.changestar(this.prv);
            this.changeScore(this.prv);
            this.changeFace(this.prv);
            this.getCookie(this.prv+1);
            Starr.EVERYSCORE[this.label]=index+1;
        }
    }
    //改变星星颜色方法
    changestar(index){
        for(var i=0;i<this.startArr.length;i++){
            if(i<=index)this.startArr[i].style.backgroundPositionY="-16px";
            else this.startArr[i].style.backgroundPositionY="0px";
        }
    }
    //分数改变方法
    changeScore(index){
        this.index=index;
        this.score.textContent=index+1+"分";
        if(index+1===0){
            this.score.style.color="#999";
        }else{   //否则有分数,文字为红色
            this.score.style.color="#e4393c";
        }
    }
    //笑脸变化
    changeFace(index){
        this.face.style.left=index*16+"px";
        this.face.style.backgroundPositionX=-(4-index)*20+"px";
    }
    //设置cookie
    getCookie(index){
        var date = new Date();
        date.setFullYear(2021);
        if(!index)index=0;
        document.cookie=this.label+"="+index+";expires="+date.toDateString();
    }
}

最终实现效果: 下次打开仍会显示该点评效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯