[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>