原生javascript实现星级评价功能

因为用到自定义字体,我首先到阿里巴巴矢量图标库下载了自己喜欢的星星样式。需要一个空心星星,一个实心星星。


按照使用方法,如下图所示引入这些文件。
在这里插入图片描述


接下来是布局,三行评价,都是一样的样式,那就用一个无序列表吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<ul>
<li class="goods">
宝贝与描述相符:
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<em></em>
</li>
<li class="att">
卖家的服务态度:
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<em></em>
</li>
<li class="trans">
物流服务的质量:
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<i class="star"></i>
<em></em>
</li>
</ul>

给star类加了一个伪类用来显示星星图标:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 .star:after{
font-family: 'Hui-iconfont';
font-size:25px;
font-style:normal;
content:"\e702";
vertical-align:middle;/*使文字和图标对齐*/
color:#eee;
}
下面这是实心星星的:
.current:after{
font-family: 'Hui-iconfont';
font-size:25px;
font-style:normal;
content:"\e6ff";
vertical-align:middle;
}

布局完是这样的:
在这里插入图片描述
下面开始写js.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function comment(liName,content){
var li=document.getElementsByClassName(liName)[0];
var star=li.getElementsByTagName("i");
var currentClick=0,num=0;
for(var i=1;i<=star.length;i++){
star[i-1].index=i;
star[i-1].onmouseover=function(){
show(this.index);
}
star[i-1].onmouseout=function(){
//选择i=1;就是为了把0让给这一步,鼠标移开不显示实星星。
show(0);
}
star[i-1].onclick=function(){
currentClick=this.index;
show(currentClick);
}
}
function show(index){
//当点击后,又经过又离开,传递参数0;但短路语句直接返回currentClick,以此保证点击之后再经过也不改变。
num=index||currentClick;
for(var j=0;j<star.length;j++){
star[j].className=(j<num)?'current':'star';
if(num==1||num==2){
star[j].style.color="#666"
} else if(num==3||num==4){
star[j].style.color="orange";
} else{
star[j].style.color="red";
}
}
li.getElementsByTagName("em")[0].innerText=num>0?content[num-1]:"";
}
}
var arr=["一分 失望","两分 不满","三分 一般","四分 满意","五分 惊喜"];
comment("goods",arr);
comment("att",arr);
comment("trans",arr)

就可以实现基本的效果啦!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

------------- 本文结束 感谢您的阅读-------------

本文标题:原生javascript实现星级评价功能

文章作者:一只白~

发布时间:2019年01月11日 - 00:01

最后更新:2019年02月17日 - 13:02

原始链接:http://yoursite.com/2019/01/11/star_js/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。