使用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 相关文章推荐
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
May 27 Javascript
jQuery实用基础超详细介绍
Apr 11 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
Javascript 绘制 sin 曲线过程附图
Aug 21 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
javascript解析xml实现省市县三级联动的方法
Jul 25 Javascript
javascript url几种编码方式详解
Jun 06 Javascript
js添加千分位的实现代码(超简单)
Aug 01 Javascript
老生常谈原生JS执行环境与作用域
Nov 22 Javascript
浅谈vue的踩坑路
Aug 31 Javascript
详解项目升级到vue-cli3的正确姿势
Jan 28 Javascript
javascript实现图片轮播代码
Jul 09 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 mssql 时间格式问题
2009/01/13 PHP
php实现的CSS更新类实例
2014/09/22 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
vue下的@change事件的实现
2019/10/25 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
解析Python中while true的使用
2015/10/13 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
深入学习Python中的装饰器使用
2016/06/20 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
使用python实现BLAST
2018/02/12 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python可迭代对象操作示例
2019/05/07 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
零件设计自荐信范文
2013/11/27 职场文书
模具数控专业自荐信
2014/01/27 职场文书
大学生创业策划书
2014/02/02 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python