[js实现星级评价]javascript的作用域

在函数内部声明的变量,如果用var声明则在函数内部有效,如果声明的变量不带var,则默认是全局变量。

单列星星显示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>js星级评分点击星级评论打分效果</title>
<meta name="description" content="js星级评论打分系统,制作鼠标滑过星级提示星级描述,点击星级评论打分效果。js代码" />

<style type="text/css"> 
*{margin:0;padding:0;list-style-type:none;}
body{color:#666;font:12px/1.5 Arial;}
/* star */
#star{position:relative;width:600px;margin:20px auto;height:24px;}
#star ul,#star span{float:left;display:inline;height:19px;line-height:19px;}
#star ul{margin:0 10px;}
#star li{float:left;width:24px;cursor:pointer;text-indent:-9999px;background:url(images/star.png) no-repeat;}
#star strong{color:#f60;padding-left:10px;}
#star li.on{background-position:0 -28px;}
#star p{position:absolute;top:20px;width:159px;height:60px;display:none;background:url(images/icon.gif) no-repeat;padding:7px 10px 0;}
#star p em{color:#f60;display:block;font-style:normal;}
</style>

<script type="text/javascript">
    window.onload = function () {

        var oStar = document.getElementById("star");
        var aLi = oStar.getElementsByTagName("li");
        var oUl = oStar.getElementsByTagName("ul")[0];
        var oSpan = oStar.getElementsByTagName("span")[1];
        var oP = oStar.getElementsByTagName("p")[0];
        var i = iScore = iStar = 0;
        var aMsg = [
                "很不满意|差得太离谱,与卖家描述的严重不符,非常不满",
                "不满意|部分有破损,与卖家描述的不符,不满意",
                "一般|质量一般,没有卖家描述的那么好",
                "满意|质量不错,与卖家描述的基本一致,还是挺满意的",
                "非常满意|质量非常好,与卖家描述的完全一致,非常满意"
                ]

        for (i = 1; i <= aLi.length; i++) {
            aLi[i - 1].index = i;

            //鼠标移过显示分数
            aLi[i - 1].onmouseover = function () {
                fnPoint(this.index);
                //浮动层显示
                oP.style.display = "block";
                //计算浮动层位置
                oP.style.left = oUl.offsetLeft + this.index * this.offsetWidth - 104 + "px";
                //匹配浮动层文字内容
                oP.innerHTML = "<em><b>" + this.index + "</b> 分 " + aMsg[this.index - 1].match(/(.+)\|/)[1] + "</em>" + aMsg[this.index - 1].match(/\|(.+)/)[1]
            };

            //鼠标离开后恢复上次评分
            aLi[i - 1].onmouseout = function () {
                fnPoint();
                //关闭浮动层
                oP.style.display = "none"
            };

            //点击后进行评分处理
            aLi[i - 1].onclick = function () {
                iStar = this.index;
                oP.style.display = "none";
                oSpan.innerHTML = "<strong>" + (this.index) + " 分</strong> (" + aMsg[this.index - 1].match(/\|(.+)/)[1] + ")"
            }
        }

        //评分处理
        function fnPoint(iArg) {
            //分数赋值
            console.info("iStar"+iStar);
            iScore = iArg || iStar;
            for (i = 0; i < aLi.length; i++) aLi[i].className = i < iScore ? "on" : "";
        }

    };
</script>
</head>
<body>

    <div id="star">
        <span>js星级评论打分</span>
        <ul>
            <li><a href="javascript:;">1</a></li>
            <li><a href="javascript:;">2</a></li>
            <li><a href="javascript:;">3</a></li>
            <li><a href="javascript:;">4</a></li>
            <li><a href="javascript:;">5</a></li>
        </ul>
        <span></span>
        <p></p>
    </div><!--star end-->
    
</body>
</html>

多列星星显示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>js星级评分点击星级评论打分效果</title>
    <meta name="description" content="js星级评论打分系统,制作鼠标滑过星级提示星级描述,点击星级评论打分效果。js代码" />
    <style type="text/css">
        *
        {
            margin: 0;
            padding: 0;
            list-style-type: none;
        }
        body
        {
            color: #666;
            font: 12px/1.5 Arial;
        }
        /* star */
        .star
        {
            position: relative;
            width: 600px;
            margin: 20px auto;
            height: 24px;
        }
        .star ul, .star span
        {
            float: left;
            display: inline;
            height: 19px;
            line-height: 19px;
        }
        .star ul
        {
            margin: 0 10px;
        }
        .star li
        {
            float: left;
            width: 24px;
            cursor: pointer;
            text-indent: -9999px;
            background: url(images/star.png) no-repeat;
        }
        .star strong
        {
            color: #f60;
            padding-left: 10px;
        }
        .star li.on
        {
            background-position: 0 -28px;
        }
        .star p
        {
            position: absolute;
            top: 20px;
            width: 159px;
            height: 60px;
            display: none;
            background: url(images/icon.gif) no-repeat;
            padding: 7px 10px 0;
            z-index: 1;
        }
        .star p em
        {
            color: #f60;
            display: block;
            font-style: normal;
        }
    </style>
    <script type="text/javascript">
        var iScore = [0, 0, 0];
        var iStar = [0, 0, 0];
        var aLi = [], oUl = [], oSpan = [], oP = [], oStar = [];
    
        var aMsg1 = [
                "很不满意|差得太离谱,与卖家描述的严重不符,非常不满",
                "不满意|部分有破损,与卖家描述的不符,不满意",
                "一般|质量一般,没有卖家描述的那么好",
                "满意|质量不错,与卖家描述的基本一致,还是挺满意的",
                "非常满意|质量非常好,与卖家描述的完全一致,非常满意"
                ];
        var aMsg2 = [
                "很不满意|差得太离谱,与卖家描述的严重不符,非常不满",
                "不满意|部分有破损,与卖家描述的不符,不满意",
                "一般|质量一般,没有卖家描述的那么好",
                "满意|质量不错,与卖家描述的基本一致,还是挺满意的",
                "非常满意|质量非常好,与卖家描述的完全一致,非常满意"
                ];
        var aMsg3 = [
                "很不满意|差得太离谱,与卖家描述的严重不符,非常不满",
                "不满意|部分有破损,与卖家描述的不符,不满意",
                "一般|质量一般,没有卖家描述的那么好",
                "满意|质量不错,与卖家描述的基本一致,还是挺满意的",
                "非常满意|质量非常好,与卖家描述的完全一致,非常满意"
                ];
        var aMsg = [aMsg1, aMsg2, aMsg3];
        function bindstar(domid, msg, m) {

            oStar[m] = document.querySelector("#" + domid);
            aLi[m] = oStar[m].getElementsByTagName("li");
            oUl[m] = oStar[m].getElementsByTagName("ul")[0];
            oSpan[m] = oStar[m].getElementsByTagName("span")[1];
            oP[m] = oStar[m].getElementsByTagName("p")[0];
            i = iScore[m] = iStar[m] = 0;
            aMsg[m] = msg;

            for (i = 1; i <= aLi[m].length; i++) {
                aLi[m][i - 1].index = i;

                //鼠标移过显示分数
                aLi[m][i - 1].onmouseover = function () {
                    fnPoint(domid,m, this.index);
                    //浮动层显示
                    oP[m].style.display = "block";
                    //计算浮动层位置
                    oP[m].style.left = oUl[m].offsetLeft + this.index * this.offsetWidth - 104 + "px";
                    //匹配浮动层文字内容
                    oP[m].innerHTML = "<em><b>" + this.index + "</b> 分 " + aMsg[m][this.index - 1].match(/(.+)\|/)[1] + "</em>" + aMsg[m][this.index - 1].match(/\|(.+)/)[1]
                };

                //鼠标离开后恢复上次评分
                aLi[m][i - 1].onmouseout = function () {
                    fnPoint(domid,m);
                    //关闭浮动层
                    oP[m].style.display = "none"
                };

                //点击后进行评分处理
                aLi[m][i - 1].onclick = function () {
                    iStar[m] = this.index;
                    console.info(iStar);
                    oP[m].style.display = "none";
                    oSpan[m].innerHTML = "<strong>" + (this.index) + " 分</strong> (" + aMsg[m][this.index - 1].match(/\|(.+)/)[1] + ")";
                }
            }

            //评分处理
            function fnPoint(domid, m,iArg) {
                oStar[m] = document.querySelector("#" + domid);
                aLi[m] = oStar[m].getElementsByTagName("li");
                //分数赋值
                iScore[m] = iArg || iStar[m];
                for (i = 0; i < aLi[m].length; i++) aLi[m][i].className = i < iScore[m] ? "on" : "";
            }
        }

    
        window.onload = function () {
            bindstar("star1", aMsg1, 0);
            bindstar("star2", aMsg2, 1);
            bindstar("star3", aMsg3, 2);
        };
    </script>
</head>
<body>
    <div id="star1" class="star">
        <span>服务品质:</span>
        <ul>
            <li><a href="javascript:;">1</a></li>
            <li><a href="javascript:;">2</a></li>
            <li><a href="javascript:;">3</a></li>
            <li><a href="javascript:;">4</a></li>
            <li><a href="javascript:;">5</a></li>
        </ul>
        <span></span>
        <p>
        </p>
    </div>
    <div id="star2" class="star">
        <span>物流速度:</span>
        <ul>
            <li><a href="javascript:;">1</a></li>
            <li><a href="javascript:;">2</a></li>
            <li><a href="javascript:;">3</a></li>
            <li><a href="javascript:;">4</a></li>
            <li><a href="javascript:;">5</a></li>
        </ul>
        <span></span>
        <p>
        </p>
    </div>
    <div id="star3" class="star">
        <span>包装质量:</span>
        <ul>
            <li><a href="javascript:;">1</a></li>
            <li><a href="javascript:;">2</a></li>
            <li><a href="javascript:;">3</a></li>
            <li><a href="javascript:;">4</a></li>
            <li><a href="javascript:;">5</a></li>
        </ul>
        <span></span>
        <p>
        </p>
    </div>
    <!--star end-->
</body>
</html>

 

posted @ 2015-04-09 11:10  杨博客  阅读(188)  评论(0编辑  收藏  举报