使用jQuery实现星级评分代码分享


Posted in Javascript onDecember 09, 2014

前面有一篇原生js实现星级评分 。可能覆盖面不是很广,现在给出一个jquery实现的星级评分。

<div class="star">  

<span>jQuery星级评论打分</span>  

<ul>  

<li><a href="javascript:;">1</a></li>  

<li><a href="javascript:;">2</a></li>  

<li><a href="javascript:;">3</a></li>  

<li><a href="javascript:;">4</a></li>  

<li><a href="javascript:;">5</a></li>  

</ul>  

</div> 
<style>  

*{margin:0;padding:0;font-size:13px;}  

ul,li{list-style:none;}  

.star {position:relative;width:600px;height:24px; margin:20px auto 0;}  

.star span {float:left;height:19px;line-height:19px;}  

.star ul{margin:0 10px;}  

.star li{float:left;width:24px;height:22px;text-indent:-9999px;background:url('star.png') no-repeat;cursor:pointer;}  

.star li.on{background-position:0 -28px;}  

.star p {padding:10px 10px 0;position:absolute;top:20px;width:159px;height:60px;z-index:100;}  

.star p em {color: #FF6600;display: block;font-style: normal;}  

.star strong {color:#ff6600;padding-left:10px;}  

.hidden{display:none;}  

</style> 
<script type="text/javascript" src="http://s.thsi.cn/js/jquery-1.7.2.min.js"></script>  

<script type="text/javascript" src="score.js"></script>  

</head>  

  

<body>  

<script type="text/javascript">  

$(function(){  

var score = new Score({  

callback: function(cfg) {  

console.log(cfg.starAmount);  

}  

});  

});  

</script> 

 
/** 

 * JQ评分效果 

 */  

 function Score(options) {  

    this.config = {  

        selector                  :   '.star',     // 评分容器  

        renderCallback            :   null,        // 渲染页面后回调  

        callback                  :   null         // 点击评分回调                           

    };  

  

    this.cache = {  

        aMsg : [  

                "很不满意|差得太离谱,与卖家描述的严重不符,非常不满",  

                "不满意|部分有破损,与卖家描述的不符,不满意",  

                "一般|质量一般,没有卖家描述的那么好",  

                "满意|质量不错,与卖家描述的基本一致,还是挺满意的",  

                "非常满意|质量非常好,与卖家描述的完全一致,非常满意"  

                ],  

        iStar  : 0,  

        iScore : 0  

    };  

  

    this.init(options);  

 }  

  

 Score.prototype = {  

  

    constructor: Score,  

  

    init: function(options){  

        this.config = $.extend(this.config,options || {});  

        var self = this,  

            _config = self.config,  

            _cache = self.cache;  

  

        self._renderHTML();  

    },  

    _renderHTML: function(){  

        var self = this,  

            _config = self.config;  

        var html = '<span class="desc"></span>' +   

                   '<p class="star-p hidden"></p>';  

        $(_config.selector).each(function(index,item){  

            $(item).append(html);  

            $(item).wrap($('<div class="parentCls" style="position:relative"></div>'));  

            var parentCls = $(item).closest('.parentCls');  

            self._bindEnv(parentCls);  

            _config.renderCallback && $.isFunction(_config.renderCallback) && _config.renderCallback();  

        });  

  

    },  

    _bindEnv: function(parentCls){  

        var self = this,  

            _config = self.config,  

            _cache = self.cache;  

  

        $(_config.selector + ' li',parentCls).each(function(index,item){  

              

            // 鼠标移上  

            $(item).mouseover(function(e){  

                var offsetLeft = $('ul',parentCls)[0].offsetLeft;  

                ismax(index + 1);  

                  

                $('p',parentCls).hasClass('hidden') && $('p',parentCls).removeClass('hidden');  

                $('p',parentCls).css({'left':index*$(this).width() + 12 + 'px'});  

                  

  

                var html = '<em>' +   

                              '<b>'+index+'</b>分 '+_cache.aMsg[index].split('|')[0]+'' +   

                           '</em>' + _cache.aMsg[index].split('|')[1];  

                $('p',parentCls).html(html);  

            });  

  

            // 鼠标移出  

            $(item).mouseout(function(){  

                ismax();  

                !$('p',parentCls).hasClass('hidden') && $('p',parentCls).addClass('hidden');  

            });  

              

            // 鼠标点击  

            $(item).click(function(e){  

                var index = $(_config.selector + ' li',parentCls).index($(this));  

                _cache.iStar = index + 1;  

                                  

                !$('p',parentCls).hasClass('hidden') && $('p',parentCls).addClass('hidden');  

                var html = '<strong>' +  

                                index +  

                           '分</strong>' +_cache.aMsg[index].split('|')[1];  

  

                $('.desc',parentCls).html(html);  

                _config.callback && $.isFunction(_config.callback) && _config.callback({starAmount:_cache.iStar});  

            });  

              

        });  

  

        function ismax(iArg) {  

            _cache.iScore = iArg || _cache.iStar;  

            var lis = $(_config.selector + ' li',parentCls);  

              

            for(var i = 0; i < lis.length; i++) {  

                lis[i].className = i < _cache.iScore ? "on" : "";  

            }  

        }  

    }  

 }; 

使用方法超级简单,这里就不多废话了,小伙伴们拿走自由发挥吧。

Javascript 相关文章推荐
游戏人文件夹程序 ver 4.03
Jul 14 Javascript
JavaScript 设计模式学习 Factory
Jul 29 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
Jan 15 Javascript
JavaScript等比例缩放图片控制超出范围的图片
Aug 06 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
学习Node.js模块机制
Oct 17 Javascript
jquery实现图片列表鼠标移入微动
Dec 01 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
Vue 按键修饰符处理事件的方法
May 04 Javascript
angular 数据绑定之[]和{{}}的区别
Sep 25 Javascript
如何在Angular应用中创建包含组件方法示例
Mar 23 Javascript
微信小程序swiper使用网络图片不显示问题解决
Dec 13 Javascript
Jquery弹出层插件ThickBox的使用方法
Dec 09 #Javascript
浅谈JavaScript函数节流
Dec 09 #Javascript
node.js中的console.log方法使用说明
Dec 09 #Javascript
node.js中的console.warn方法使用说明
Dec 09 #Javascript
node.js中的console.info方法使用说明
Dec 09 #Javascript
浅谈JavaScript实现面向对象中的类
Dec 09 #Javascript
node.js中的console.trace方法使用说明
Dec 09 #Javascript
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php Undefined index的问题
2009/06/01 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
jquery 使用点滴函数代码
2011/05/20 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
Python探索之自定义实现线程池
2017/10/27 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
Python 控制终端输出文字的实例
2019/07/12 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
彻底解决Python包下载慢问题
2020/11/15 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
How TDD works
2012/09/30 面试题
售后专员岗位职责
2013/12/08 职场文书
自我评价范文
2013/12/22 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
政府会议通知范文
2015/04/15 职场文书