Js仿淘宝星级评分

效果预览:

http://jsfiddle.net/dtdxrk/wYABP/embedded/result/

  1 <!DOCTYPE HTML>
  2 <html lang="en">
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5 <title>Js仿淘宝星级评分</title>
  6 <style> 
  7 *{margin:0;padding:0;}
  8 body{color:#666;font:12px/1.5 Arial;}
  9 h1{font-size: 18px;}
 10 ul.star {position:relative;list-style-type:none;}
 11 ul.star li{height: 24px;clear: both;}
 12 ul.star li label, ul.star li span, ul.star li strong{display: block;float:left;}
 13 ul.star li label{margin-right: 5px;}
 14 ul.star li strong{margin-left: 5px;}
 15 ul.star li span{width:24px;background:url(http://www.codefans.net/jscss/demoimg/201206/star.png) no-repeat;text-indent: -9999px;cursor: pointer;}
 16 ul.star li span.active{background-position:0 -28px;}
 17 ul.star li strong{color:#f60;font-size: 14px;}
 18 ul.star li strong.s{color:#666;font-size: 12px;font-weight: normal;}
 19 ul.star p{position:absolute;padding:2px 5px;display:none;background-color: #fff;border: 2px orange solid;z-index: 99;}
 20 ul.star p em{color:#f60;font-style:normal;font-weight: bold;}
 21 </style>
 22 
 23 </head>
 24 <body>
 25 
 26 
 27 
 28     <h1>Js仿淘宝星级评分</h1>
 29     <ul class="star" id="star">
 30         <p></p>
 31         <li id="L1">
 32             <label>宝贝与描述A</label>
 33             <span>1分</span>
 34             <span>2分</span>
 35             <span>3分</span>
 36             <span>4分</span>
 37             <span>5分</span>
 38             <strong></strong>
 39             <strong class="s"></strong>
 40         </li>
 41         <li id="L2">
 42             <label>宝贝与描述B</label>
 43             <span>1分</span>
 44             <span>2分</span>
 45             <span>3分</span>
 46             <span>4分</span>
 47             <span>5分</span>
 48             <strong></strong>
 49             <strong class="s"></strong>
 50         </li>
 51         <li id="L3">
 52             <label>宝贝与描述C</label>
 53             <span>1分</span>
 54             <span>2分</span>
 55             <span>3分</span>
 56             <span>4分</span>
 57             <span>5分</span>
 58             <strong></strong>
 59             <strong class="s"></strong>
 60         </li>           
 61     </ul>
 62 
 63 
 64 <script type="text/javascript">
 65 star("L1", ["很不满意0|差得太离谱,与卖家描述的严重不符,非常不满", "不满意0|部分有破损,与卖家描述的不符,不满意", "一般0|质量一般,没有卖家描述的那么好", "满意0|质量不错,与卖家描述的基本一致,还是挺满意的", "非常满意0|质量非常好,与卖家描述的完全一致,非常满意"])
 66 star("L2", ["很不满意1|差得太离谱,与卖家描述的严重不符,非常不满", "不满意1|部分有破损,与卖家描述的不符,不满意", "一般1|质量一般,没有卖家描述的那么好", "满意1|质量不错,与卖家描述的基本一致,还是挺满意的", "非常满意1|质量非常好,与卖家描述的完全一致,非常满意"])
 67 star("L3", ["很不满意2|差得太离谱,与卖家描述的严重不符,非常不满", "不满意2|部分有破损,与卖家描述的不符,不满意", "一般2|质量一般,没有卖家描述的那么好", "满意2|质量不错,与卖家描述的基本一致,还是挺满意的", "非常满意2|质量非常好,与卖家描述的完全一致,非常满意"])
 68 
 69 function star(id, aMsg){    //aMsg为数组描述
 70     var star = document.getElementById("star"),
 71         li = document.getElementById(id),
 72         spans = li.getElementsByTagName("span"),
 73         p = star.getElementsByTagName("p")[0],
 74         strong1 = li.getElementsByTagName("strong")[0],
 75         strong2 = li.getElementsByTagName("strong")[1];
 76     var iStar;
 77 
 78     for(var i=0; i<spans.length; i++){
 79 
 80         //给每个span加一个index
 81         spans[i].index = i+1; 
 82 
 83         //鼠标移动上添加active
 84         spans[i].onmouseover = function(){
 85             onStar(this.index);
 86             p.style.display = "block";
 87             p.style.top = (getPosition(this).top-5) + "px";
 88             p.style.left = getPosition(this).left + "px";
 89         };
 90 
 91         //鼠标移出删除acitve
 92         spans[i].onmouseout = function(){
 93             onStar();
 94             p.innerHTML = "<em>" + aMsg[this.index - 1].match(/(.+)\|/)[1] + "</em><br />" + aMsg[this.index - 1].match(/\|(.+)/)[1]
 95             p.style.display = "";
 96         };
 97 
 98         //鼠标点击后进行评分处理
 99         spans[i].onclick = function(){
100             iStar = this.index;
101             strong1.innerHTML = this.innerHTML;
102             strong2.innerHTML = "("+ aMsg[this.index - 1].match(/\|(.+)/)[1] +")";
103         };
104 
105     };
106 
107 
108     //当前访问到第几个index
109     function onStar(spanIndex){
110         var iScore = spanIndex || iStar;
111         for(var i = 0; i < spans.length; i++){
112             spans[i].className = (i<iScore ? "active" : "");        
113         }
114     };
115 
116 }
117 
118 
119 //查找元素位置
120 function getPosition(obj) {
121     var top = 0,
122         left = 0,
123         width = obj.offsetWidth,
124         height = obj.offsetHeight;
125 
126     while(obj.offsetParent){
127         top += obj.offsetTop;
128         left += obj.offsetLeft;
129         obj = obj.offsetParent;
130     }
131     return {"top":top,"left":left,"width":width,"height":height};
132 }
133 </script>
134 </body>
135 </html>
原文地址:https://www.cnblogs.com/dtdxrk/p/2604536.html