使用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 相关文章推荐
JavaScript 读取元素的CSS信息的代码
Feb 07 Javascript
javascript面向对象之二 命名空间
Feb 08 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
Javascript中call与apply的学习笔记
Sep 22 Javascript
javascript定时器完整实例
Feb 10 Javascript
js密码强度实时检测代码
Mar 02 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
Jun 13 Javascript
JavaScript中获取HTML元素值的三种方法
Jun 20 Javascript
深入理解JS DOM事件机制
Aug 06 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
Dec 08 Javascript
12个非常有用的JavaScript技巧
May 17 Javascript
keep-alive保持组件状态的方法
Dec 02 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
php利用反射实现插件机制的方法
2015/03/14 PHP
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
Python实现处理管道的方法
2015/06/04 Python
Tornado 多进程实现分析详解
2018/01/12 Python
Python实现快速计算词频功能示例
2018/06/25 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
交通事故赔偿协议书
2014/04/15 职场文书
项目合作协议书
2014/04/16 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
网站出售协议书范文
2014/10/10 职场文书
员工离职通知函
2015/04/25 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python