最近在学php,要整一个星级评分的效果的,找了很久,找到一个非常好的js实例。支持小数点一味显示,像百度啥的,都啥半分的。不爽!!要么就来3.8分,哈哈……
原理上,是采用js+css实现,先整一张图片,如图,两颗星星,一颗亮,一颗暗,我们要做的就是用js和css控制图片显示的位置,从而达到评分的效果的。采用两层div,后一层全部用暗星拼接,顶层用亮星,并且控制其长度,从而达到小数点后一位支持的效果。这个要用到jquery,这个是个好玩意的,web开发者应该要学着用的,我也正在学的。
代码:
css:
Code.user_rate {font-size:14px; position:relative; padding:10px 0;} .user_rate p {margin:0; padding:0; display:inline; height:20px; overflow:hidden; position:absolute; top:0; left:100px; margin-left:95px;} .user_rate p span.s {font-size:20px; line-height:20px; float:left; font-weight:bold; color:#DD5400;} .user_rate p span.g {font-size:18px; display:block; float:left; color:#DD5400;} /*rating*/ .big_rate_bak {width:95px; height:20px; text-align:left; position:absolute; top:3px; left:95px; display:inline-block; background:url(images/two_stars2.jpg) left -21px repeat-x;} .big_rate_bak b {display:inline-block; width:19px;float:left; height:20px; position:relative; z-index:1000; cursor:pointer; overflow:hidden;} .big_rate_up {width:95px; height:20px; position:absolute; top:0; left:0; background:url(images/two_stars2.jpg) left top;}
js:
Code//页面加载初始化分数 $(function(){ get_rate(100); }) //鼠标单击,在div上移动和脱离焦点的方法。 function get_rate(rate){ //获得分值 rate=rate.toString(); var s;//十位 var g;//个位 $("#g").show(); if (rate.length>=3){ s=10; g=0; $("#g").hide(); }else if(rate=="0"){ s=0; g=0; }else{ s=rate.substr(0,1); g=rate.substr(1,1); } //显示分数 $("#s").text(s); $("#g").text("."+ g); //width:(parseInt(s)+parseInt(g)/10) * 9.5,height:20,其中width计算方法,前面括号里的可以不变,后边的乘数是你(图片的宽度*显示的星数/100),height,图片的高度的一半 $(".big_rate_up").animate({width:(parseInt(s)+parseInt(g)/10) * 9.5,height:20},1000);//用jquery实现渐进效果 $(".big_rate_bak b").each(function(){ //鼠标移动事件 $(this).mouseover(function(){ $(".big_rate_up").width($(this).attr("rate") * 9.5 ); $("#s").text($(this).attr("rate")); $("#g").text(""); }).click(function(){ $("#f").text($(this).attr("rate")); $("#my_rate").show(); }) }) //div失去焦点事件 $(".big_rate_bak").mouseout(function(){ $("#s").text(s); $("#g").text("."+ g); $(".big_rate_up").width((parseInt(s)+parseInt(g)/10) * 9.5); }) } //执行方法 function up_rate(rate){ $(".big_rate_up").width("0"); get_rate(rate); }
前台html:
Code<div class="user_rate"> <div class="big_rate_bak"> <b rate="2" οnclick="javascript:up_rate(20);"> </b> <b rate="4" οnclick="javascript:up_rate(40);"> </b> <b rate="6" οnclick="javascript:up_rate(60);"> </b> <b rate="8" οnclick="javascript:up_rate(80);"> </b> <b rate="10" οnclick="javascript:up_rate(100);"> </b> <div class="big_rate_up"></div> </div> <p><span id="s" class="s"></span><span id="g" class="g"></span></p> </div>
最终实现效果: