jQuery插件-jRating评分插件源码分析及使用方法

jQuery插件-jRating评分插件源码分析及使用方法

jRating评分插件介绍

jRating评分插件是一款jQuery评分插件,它可以让用户对一个对象进行打分,非常实用。相比大部分jQuery评分插件,jRating评分插件更加轻便,易于使用和定制。它使用CSS和DOM处理来改变HTML元素的外观和表现。

jRating评分插件的特点

  • 简单易用。
  • 自适应大小。
  • 可以通过CSS来定制样式。
  • 支持多种评分风格。
  • 支持只读模式和可编辑模式。
  • 可以设置评分的最大值和最小值。

jRating评分插件的源代码分析

jRating评分插件的源代码包含两个文件,分别是jquery.jRating.js和jquery.jRating.css

jquery.jRating.js代码分析:

(function($) {
    $.fn.jRating = function(op) {
        // 默认选项
        var defaults = {
            bigStarsPath: '/jRating.jquery/img/stars.png',
            smallStarsPath: '/jRating.jquery/img/small.png',
            type: 'big', // 大小评分风格
            length: 5, // 最大评分
            decimalLength: 0, // 设置评分小数位数
            rateMax: 5, // 最大评级
            nbRates: 5, // 评级次数
            canRateAgain: true, // 是否允许重新评级
            onClick: function(element, rate) {},
            onSuccess: function(element, rate) {},
            onError: function(element, rate) {}
        };

        var options = $.extend(defaults, op);
        // 插入元素
        return this.each(function() {
            element = $(this);
            element.width(options.length * 32); // 设置宽度
            element.css('background', 'url(' + options.bigStarsPath + ')');
            // 显示默认的评分值
            var average = element.attr('data-average');
            if (average != 0 && average != '') {
                $("#jRatingInfo").remove();
                element.find('.jRatingInfos').append('<p id="jRatingInfo">' + average + '/' + options.rateMax + '</p>');
                element.find('.jStar').slice(0, average).css('background', 'url(' + options.smallStarsPath + ')');
            }

            element.find('.jStar').unbind().bind('mouseover', function() {
                var index = $(this).prevAll().length + 1;
                $(this).parent().css('background-position', '0 ' + ((options.length - index) * 32) + 'px');
            });
            element.find('.jStar').unbind().bind('mouseout', function() {
                renderRate();
            });
            element.find('.jStar').unbind().bind('click', function() {
                var rate = $(this).prevAll().length + 1;
                setRate(rate);
            });

            function setRate(rate) {
                element.find('.jStar').unbind(); // 取消所有事件绑定
                if (options.canRateAgain == true || element.attr('data-rateable') == 'true') {
                    $.ajax({
                        url: options.url,
                        type: 'POST',
                        data: 'rate=' + rate + '&id=' + element.attr('data-id') + '&type=' + element.attr('data-type'),
                        success: function(data) {
                            element.attr('data-rateable', false);
                            element.attr('data-average', data);
                            element.find('.jStar').slice(0, rate).css('background', 'url(' + options.smallStarsPath + ')');
                            element.find('.jRatingInfos').empty().append('<p>' + data + '/' + options.rateMax + '</p>');
                            options.onClick(element, rate);
                            options.onSuccess(element, rate);
                        },
                        error: function(jqXHR, textStatus, errorThrown) {
                            alert("Error: " + textStatus + " " + errorThrown);
                            options.onError(element, rate);
                        }
                    });
                }
            }

            function renderRate() {
                var average = element.attr('data-average');
                element.find('.jStar').css('background', 'url(' + options.bigStarsPath + ')');
                element.find('.jStar').slice(0, average).css('background', 'url(' + options.smallStarsPath + ')');
                if (average != 0 && average != '') {
                    $("#jRatingInfo").remove();
                    element.find('.jRatingInfos').append('<p id="jRatingInfo">' + average + '/' + options.rateMax + '</p>');
                }
                element.find('.jStar').unbind().bind('mouseover', function() {
                    var index = $(this).prevAll().length + 1;
                    $(this).parent().css('background-position', '0 ' + ((options.length - index) * 32) + 'px');
                });
                element.find('.jStar').unbind().bind('mouseout', function() {
                    renderRate();
                });
                element.find('.jStar').unbind().bind('click', function() {
                    var rate = $(this).prevAll().length + 1;
                    setRate(rate);
                });
            };

        });

        // 将整数舍去小数部分
        function getInt(number) {
            var decimal = new Number(number).toFixed(20);
            var integer = Math.floor(decimal);
            return integer;
        }
    };
})(jQuery);

jquery.jRating.css代码分析:

.jRatingContainer {
    overflow: hidden;
    position: relative;
    cursor: pointer;
}

.jRatingInfos {
    width: 100px;
    color: #999;
    position: absolute;
    top: -20px;
    left: 35px;
    text-align: center;
    z-index: 1;
    font-size: 0.9em;
    font-style: normal;
    font-weight: normal;
}

.jRatingInfos p {
    margin: 0;
    padding: 0;
    font-size: 11px;
}

.jStar {
    display: block;
    float: left;
    width: 32px;
    height: 32px;
    margin: 0 2px 0 0;
    background-repeat: no-repeat;
    background-image: url(bigStarsPath);
    background-position: 0 0px;
    text-indent: -9999px;
}

.jStar:hover {
    background-position: 0 -32px !important;
}

.jRatingReadOnly {
    cursor: default !important;
}

.jDisabled {
    cursor: default !important;
    background-position: 0 -64px !important;
}

jRating评分插件的使用方法

步骤1:下载插件

首先,你需要从官方网站下载jRating评分插件的源码文件。

步骤2:引用插件

下载好插件之后,需要在你的网站引用插件的js和css文件:

<link rel="stylesheet" href="jquery.jRating.css" type="text/css" />
<script src="jquery-1.11.3.min.js"></script>
<script src="jquery.jRating.js"></script>

步骤3:创建HTML元素

创建一个HTML元素来插入评分。

<div class="jRatingContainer" data-average="2" data-id="1" data-type="tutorial" data-rateable="true" data-url="/rating"></div>

步骤4:调用jRating评分插件

接下来,调用jRating评分插件,即可在网站上显示评分。

$('.jRatingContainer').jRating();

示例1: 基本使用

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>示例1: 基本使用</title>
    <link rel="stylesheet" href="jquery.jRating.css" type="text/css" />
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="jquery.jRating.js"></script>
</head>
<body>
    <div class="jRatingContainer" data-average="2" data-id="1" data-type="tutorial" data-rateable="true" data-url="/rating"></div>
</body>
<script>
    $('.jRatingContainer').jRating();
</script>
</html>

示例2: 属性配置

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>示例2:属性配置</title>
    <link rel="stylesheet" href="jquery.jRating.css" type="text/css" />
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="jquery.jRating.js"></script>
</head>
<body>
    <div class="jRatingContainer" data-average="3" data-id="1" data-type="tutorial" data-rateable="true" data-url="/rating" data-length="10" data-rate-max="10" data-decimal-length="1"></div>
</body>
<script>
    $('.jRatingContainer').jRating({
        length: 10, // 设置评分颗数
        rateMax: 10, // 设置评分最大值
        decimalLength: 1 // 设置评分小数位数
    });
</script>
</html>

jRating评分插件的API

Options

  • bigStarsPath
    • 描述: 大评分图标路径
    • 类型: string
    • 默认值: /jRating.jquery/img/stars.png
  • smallStarsPath
    • 描述: 小评分图标路径
    • 类型: string
    • 默认值: /jRating.jquery/img/small.png
  • type
    • 描述: 评分风格
    • 类型: string
    • 可选值: big (大评分),small (小评分)
    • 默认值: big
  • length
    • 描述: 最大评分颗数
    • 类型: integer
    • 默认值: 5
  • decimalLength
    • 描述: 评分小数位数
    • 类型: integer
    • 默认值: 0
  • rateMax
    • 描述: 最大可评分值
    • 类型: integer
    • 默认值: 5
  • nbRates
    • 描述: 评级次数
    • 类型: integer
    • 默认值: 5
  • canRateAgain
    • 描述: 是否可以重新评级
    • 类型: boolean
    • 默认值: true
  • onClick
    • 描述: 鼠标点击评分对应的回调函数
    • 参数: element, rate
    • 类型: function
    • 默认值: function(){}
  • onSuccess
    • 描述: 评分操作成功的回调函数
    • 参数: element, rate
    • 类型: function
    • 默认值: function(){}
  • onError
    • 描述: 评分操作失败的回调函数
    • 参数: element, rate
    • 类型: function
    • 默认值: function(){}

Methods

jRating插件支持两种方法调用方式:

方法1:命令式调用

插件的命令式调用方式如下所示:

// 初始化
$('.jRatingContainer').jRating();

// 设置默认评分值
$('.jRatingContainer').attr('data-rateable', false).attr('data-average', 3);

方法2:面向对象调用

插件的面向对象调用方式如下所示:

// 创建一个实例
var jRatingInstance = $('.jRatingContainer').jRating();

// 设置初始评分值
jRatingInstance.data('average', 3);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery插件-jRating评分插件源码分析及使用方法 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • CSS注释的一些高级用法

    下面是关于“CSS注释的一些高级用法”的完整攻略: 1.什么是CSS注释 CSS注释是一种特殊的文本,用于向人类读者解释CSS代码的某些部分。CSS注释被设计成不会影响到网站的外观或功能,但是对于后续的代码维护和修改非常有帮助。在CSS中,注释以“/”开始,以“/”结束。 2.CSS注释的基本用法 在CSS代码中,注释一般用于以下两个方面: 2.1 对代码进…

    css 2023年6月9日
    00
  • jQuery实战之仿淘宝商城左侧导航效果

    欢迎阅读本篇文章,本文将带你详细讲解“jQuery实战之仿淘宝商城左侧导航效果”的完整攻略,教你如何使用jQuery实现仿淘宝商城左侧导航栏效果。 包含的技术点 HTML基础标签的应用 CSS样式定义及样式优化 jQuery基础知识 jQuery的DOM操作方法 jQuery的动画效果 实现步骤 步骤1:HTML结构 仿淘宝商城左侧导航栏的核心部分在于HTM…

    css 2023年6月10日
    00
  • CSS学习之一 CSS样式的引入

    关于CSS样式的引入有以下几种方法: 内部样式表 内部样式表是指将CSS样式直接写在HTML文档中,使用style标签将CSS样式放在head标签中。 示例代码: <!DOCTYPE html> <html> <head> <title>示例文档</title> <style> body…

    css 2023年6月9日
    00
  • vuejs实现标签选项卡动态更改css样式的方法

    实现标签选项卡动态更改CSS样式是Vue.js开发中常见的需求之一。下面是一份实现该功能的完整攻略。 第一步:创建Vue组件 我们首先需要创建一个Vue组件来实现标签选项卡的功能和CSS样式的动态更改。下面是一个基本的组件示例。 <template> <div class="tab"> <div class=…

    css 2023年6月10日
    00
  • JavaScript 颜色梯度和渐变效果第3/3页

    作为“JavaScript 颜色梯度和渐变效果”系列文章的最终篇章,“JavaScript 颜色梯度和渐变效果第3/3页”的重点是利用 Canvas 绘制渐变效果。以下是该文的完整攻略: 概述 本文将教授如何在 Canvas 上绘制渐变效果。我们将使用 createLinearGradient 和 createRadialGradient 函数,分别创建线性…

    css 2023年6月9日
    00
  • Ant Design中使用css切换的问题及解决

    Ant Design是一套基于React组件化开发的UI框架,提供了众多的可复用、易于维护的组件,方便快速开发Web应用。在Ant Design中,使用CSS切换的问题比较普遍,主要是由于Ant Design采用了Less预处理器,导致CSS文件中的变量和样式名不易于直接修改。下面,我们将详细讲解Ant Design中使用CSS切换的问题及解决方案。 问题描…

    css 2023年6月10日
    00
  • css中filter属性和backdrop-filter的应用与区别详解

    CSS中filter属性和backdrop-filter的应用与区别详解 介绍 CSS中的filter属性和backdrop-filter属性可以用来修改元素的视觉效果。filter属性可以用于元素本身,而backdrop-filter属性用于元素背景。本文将详细介绍它们的使用方法。 filter属性 filter属性是CSS3中的一个属性,它能让你对元素的…

    css 2023年6月10日
    00
  • 比ant更丰富Modal组件功能实现示例详解

    下面我将详细讲解“比ant更丰富Modal组件功能实现示例详解”的完整攻略。 背景 Modal是许多Web应用程序中不可或缺的组件,它可以在不离开当前页面的情况下展示内容。许多开源UI框架如Ant Design都提供了Modal组件,但它们的功能可能无法完全满足我们的需求。因此,我们需要自己开发高度自定义的Modal组件。 步骤 步骤1:定义Modal组件 …

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部