星级评分功能实现

       我这个是在前一篇文章所介绍的js脚本基础上做的修改。(请先看前面一篇《星级评分效果 -js实现 》)

       由于把前面的脚本引入项目里,发现当鼠标移到星星图片上获取到的OY值并不在1到19之间,所以导致该功能不起作用。后来通过调试测试发现在IE中当鼠标移动到星星图片上通过event获取到的offsetY的值无论页面向上向下滑动多少其值永远在1到19之间。

所以修改了程序脚本,原来OY修改为event.offsetY,,有人会问了在firefox中没有offsetY这个属性,其实在firefox中的layerY与IE中的offsetY获取到的值是一样的。

      还有一点发现通过传过去的e在IE中运行并不存在,所以添加了一个判断若e不存在则获取window.event。

      主要代码如下:

      JS代码:

       var starStop='undefined'; function $(v,o) { return((typeof(o)=='object'?o:document).getElementById(v)); } function $S(o) { return((typeof(o)=='object'?o:$(o)).style); } function agent(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); } function abPos(o) { var o=(typeof(o)=='object'?o:$(o)), z={X:0,Y:0}; while(o!=null) { z.X+=o.offsetLeft; z.Y+=o.offsetTop; o=o.offsetParent; }; return(z); } function XY(e,v) { //var o=agent('msie')?{'X':event.clientX+document.body.scrollLeft,'Y':event.clientY+document.body.scrollTop}:{'X':e.pageX,'Y':e.pageY}; var o; if(!e) e = window.event; if(e.pageX){ o={'X':e.pageX,'Y':e.pageY}; }else if(e.clientX){ o={'X':e.clientX + document.body.scrollLeft,'Y':e.clientY + document.body.scrollTop}; } return(v?o[v]:o); } function starMouse(postfix,e,o) { if(starStop || isNaN(starStop)) { starStop=0; document.onmousemove=function(e) { //debugger; var n=postfix; var p=abPos($('star'+n)), x=XY(e), oX=x.X-p.X, oY=x.Y-p.Y; staNum=o.id.substr(4); var mouseY ; //获取鼠标所在位置确定鼠标移到了星星图像上 if(!e){ e = window.event; } if(e.offsetY){ mouseY = e.offsetY; }else if(e.layerY){ mouseY = e.layerY; }else{ mouseY = oY; } if(oX<1 || oX>84 || mouseY<0 || mouseY>19) { starStop=1; starRevert(postfix); }else { $S('starCur'+n).width=oX+'px'; $S('starUser'+n).color='#111'; $('starUser'+n).innerHTML=Math.round(oX/84*100)+'分'; } }; } }; function starUpdate(postfix,e,o) { var n=postfix, v=parseInt($('starUser'+n).innerHTML); n=o.id.substr(4); $('starCur'+n).title=v; //更新评分隐藏域值 if($('memo')){ $('memo').value=v; } }; function starRevert(postfix) { var n=postfix, v=parseInt($('starCur'+n).title); $S('starCur'+n).width=Math.round(v*84/100)+'px'; $('starUser'+n).innerHTML=(v>0?Math.round(v)+'分':''); $('starUser'+n).style.color='#888'; document.onmousemove=''; };

     HEML代码:

      <div id="star"><div class="label">星级:</div><ul id="starRating" class="star" onmousedown="starUpdate(/'Rating/',event,this)" onmousemove="starMouse(/'Rating/',event,this)" > <li id="starCurRating" class="curr" title="80" style="width: 67px;"></li> </ul> <div style="color: rgb(136, 136, 136);" mce_style="color: #888888;" id="starUserRating" class="user">80分</div></div>

     默认值设定为80分,其主要通过<li>中背景图片的宽度来达到所展示出来的星级评分效果。

     公式为:Math.round(分数/84*100)

     如:Math.round(80/84*100)=67

     Css样式则没太多变化只是引用图片的路径做了适当修改,样式代码可见前一篇文章。

你可能感兴趣的:(object,function,脚本,Class,div,firefox)