js实现评分效果

js代码实现简单评分功能

我们经常可以在购物网站及快餐应用上看见评价页面,本文将讲述如何使用代码来实现评分效果;
具体实现的功能包括:
1、鼠标滑动点亮星星,移出时星星不亮;
2、鼠标点击可点亮星星,并且不可熄灭,同时,右侧出现对应评价;
3、点击已点亮的星星,不会更改先有的点亮颗数,同时,右侧评价也不会变.
代码如下:
html部分:

<body>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <p></p>
    </div>
</body>

css部分:

<style>
        * {
            padding: 0;
            margin: 0;
        }

        div {
            /* width: 1000px;
            height: 200px; */
            display: flex;
        }

        span {
            float: left;
            background: url(source/star.gif) 0 0 no-repeat;
            /* background-size: 100% 100%; */
            width: 27px;
            height: 29px;
        }

        p {
            float: left;
            height: 29px;
            line-height: 29px;
            /* background-color: #f00; */
        }
    </style>

js部分:
这部分重点在于为已点亮的星星一个表示,即设置一个数组,数组长度对应星星总颗数,数组元素有0/1两种取值,当星星是由点击事件点亮时,对应数组元素值与之前的数组元素值都为1,此时,鼠标移出不可熄灭;当星星是由鼠标移入事件点亮时,对应数组元素值为0,当鼠标移出时,判断对应数组元素值,为0时,移出熄灭星星.

<script>
    //只能从做往右依次点亮
    //点亮后再次移入会熄灭
    var div = document.querySelector("div");
    var s = document.querySelectorAll("span");
    var p = document.querySelector("p");
    var tip = ["差评", "不推荐", "一般", "推荐", "强烈推荐"];
    var flag = [];
    //点击事件
    for (var i = 0; i < s.length; i++) {
        flag.push(0);
        s[i].index = i;
        s[i].onclick = function () {
            for (var i = 0; i <= this.index; i++) {
                s[i].style.backgroundPositionY = "-29px";
                if (s[this.index].style.backgroundPositionY == "-29px" && flag[i] == 0) {
                    p.innerHTML = tip[this.index];
                    flag[i] = 1;
                }
            }
        }
    }

    for (var i = 0; i < s.length; i++) {
        s[i].index = i;

        //鼠标悬停移出事件
        s[i].onmouseenter = function () {
            for (var i = 0; i <= this.index; i++) {
                if (flag[i] == 0) {
                    s[i].style.backgroundPositionY = "-29px";
                }
            }
        }
        s[i].onmouseleave = function () {
            for (var i = this.index; i >= 0; i--) {
                if (flag[i] == 0) {
                    s[i].style.backgroundPositionY = "";
                }
            }

        }
    }

具体效果图如下:
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值