基于jQuery的星级评分插件


Posted in Javascript onAugust 12, 2011

首先看一下运行效果如下图所示。

基于jQuery的星级评分插件

    鼠标移到星星上该星星前面的所有星星全部变亮,鼠标单击将记录点击的星星数,前面的所有星星将变亮。
一、原理
本程序的原理是这样的:一个“ul”标签,该标签的背景为灰色的星星,控制“ul”标签的宽度显示星星的数量。例如:一个星星图片的宽度为23px,那么要显示10个星星,则“ul”的宽度为230px就可以显示10个星星。
n个“li”标签,n表示您要显示星星的个数,例如你要显示10个星星那么将有10个“li”标签。那么这10个标签的宽度分别为1个星星的宽度23px,2个星星的宽度46px,......,10个星星的宽度230px。这些“li”标签的背景将为蓝色的星星。
则另外还有一个“li”标签记录鼠标单击的星星或初始设置。
这些标签都是重叠在一起的,通过鼠标滑动效果切换这些标签的层叠顺序,显示不同的星星数量,单击记录星星个数。
二、源码

$.fn.studyplay_star=function(options,callback){ 
//默认设置 
var settings ={ 
MaxStar :20, 
StarWidth :23, 
CurrentStar :5, 
Enabled :true 
}; 
if(options) { jQuery.extend(settings, options); }; 
var container = jQuery(this); 
container.css({"position":"relative"}) 
.html('<ul class="studyplay_starBg"></ul>') 
.find('.studyplay_starBg').width(settings.MaxStar*settings.StarWidth) 
.html('<li class="studyplay_starovering" style="width:'+settings.CurrentStar*settings.StarWidth+'px; z-index:0;" id="studyplay_current"></li>'); 
if(settings.Enabled) 
{ 
var ListArray = ""; 
for(k=1;k<settings.MaxStar+1;k++) 
{ 
ListArray +='<li class="studyplay_starON" style="width:'+settings.StarWidth*k+'px;z-index:'+(settings.MaxStar-k+1)+';"></li>'; 
} 
container.find('.studyplay_starBg').append(ListArray) 
.find('.studyplay_starON').hover(function(){ 
$("#studyplay_current").hide(); 
$(this).removeClass('studyplay_starON').addClass("studyplay_starovering"); 
}, 
function(){ 
$(this).removeClass('studyplay_starovering').addClass("studyplay_starON"); 
$("#studyplay_current").show(); 
}) 
.click(function(){ 
var studyplay_count = settings.MaxStar - $(this).css("z-index")+1; 
$("#studyplay_current").width(studyplay_count*settings.StarWidth) 
//回调函数 
if (typeof callback == 'function') { 
callback(studyplay_count); 
return ; 
} 
}) 
} 
}

这个插件有两个参数一个是options表示插件的一些基本设置;callback表示回调函数,该函数存在一个参数表示用户选择的星星数量。
三、使用
如果我们想在id为“z”的div上显示5个星星,默认有一颗星星选中,弹出选择星星的个数对话框,就可以如下编写代码:
<div id="z"></div> 
<script type="text/javascript"> 
$(document).ready(function(){ 
$("#z").studyplay_star({MaxStar:5,CurrentStar:2},function(value){alert(value)}); 
}); 
</script>

如果想显示评分结果 可以把Enabled设置false就ok了
四、代码下载

经网友反映说火狐下面存在这问题,今天进行了调试进行了修改 主要是因为样式中li标签没有定义高度引起的,现在已经修正,谢谢朋友们。火狐修正版下载地址:
star2.rar 
真心的谢谢网友们
第三次修改:添加0.5分评分功能
使用说明:其中half等于0表示一分一分的增加,1表示0.5的增加
例如:$("#z").studyplay_star({MaxStar:12,CurrentStar:2,Enabled:true,Half:1},function(value){alert(value)});
下载地址:halfstar2.rar

Javascript 相关文章推荐
用javascript实现的激活输入框后隐藏初始内容
Jun 29 Javascript
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
学习JavaScript设计模式之代理模式
Jan 12 Javascript
JavaScript的==运算详解
Jul 20 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
Feb 08 Javascript
Validform验证时可以为空否则按照指定格式验证
Oct 20 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
浅谈Vue数据响应思路之数组
Nov 06 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
Jun 21 Javascript
JavaScript对象字面量和构造函数原理与用法详解
Apr 18 Javascript
基于jQuery的投票系统显示结果插件
Aug 12 #Javascript
JavaScript中的View-Model使用介绍
Aug 11 #Javascript
仿jQuery的siblings效果的js代码
Aug 09 #Javascript
html中table数据排序的js代码
Aug 09 #Javascript
最常用的12种设计模式小结
Aug 09 #Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
Aug 09 #Javascript
javascript 主动派发事件总结
Aug 09 #Javascript
You might like
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
BP神经网络原理及Python实现代码
2018/12/18 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
django中的数据库迁移的实现
2020/03/16 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
介绍一下MD5加密算法
2016/11/12 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
公司人力资源的自我评价
2014/01/02 职场文书
高中地理教学反思
2014/01/29 职场文书
高中语文课后反思
2014/04/27 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
销售求职信范文
2014/05/26 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android
python 安全地删除列表元素的方法
2022/03/16 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android