给easyui的progressbar组件添加一个设置进度条进度的方法

文章介绍了如何修改EasyUI的progressbar组件源码,以解决其只能显示0~100数字和无法动态显示非百分比值的问题。作者添加了setPercent方法,允许设置进度条的百分比,并提供了示例代码展示如何使用新功能。修改后的组件更灵活,能满足更多定制需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事情经过大概是这样:easyui有一个progressbar进度条组件,样式挺好看,但是没有完全满足我的需求,最近有时间了,决定修改一下easyui的源码。

easyui progressbar存在的问题:
①只能显示0~100的数字;
②不能动态显示百分比,除非设置value为"{value%}",也就是progressbar默认的文本格式,但是有些情况下是不需要显示百分比的,只需要显示给定的值,而进度条的进度通过计算得到

修改之后的progressbar部分的代码为

jquery.easyui.min.js

/**
 * progressbar组件
 */
(function ($) {
    function init(_1e6) {
        $(_1e6).addClass("progressbar");
        $(_1e6).html(
            "<div class=\"progressbar-text\"></div>" +
            "<div class=\"progressbar-value\">" +
                "<div class=\"progressbar-text\"></div>" +
            "</div>"
        );
        $(_1e6)._bind("_resize", function (e, size) {
            if ($(this).hasClass("easyui-fluid") || size) {
                _1e8(_1e6);
            }
            return false;
        });
        return $(_1e6);
    };

    function _1e8(_1e9, width) {
        var opts = $.data(_1e9, "progressbar").options;
        var bar = $.data(_1e9, "progressbar").bar;

        if (width) {
            opts.width = width;
        }
        bar._size(opts);

        bar.find("div.progressbar-text").css("width", bar.width());
        bar.find("div.progressbar-value").css("width", opts.percent + "%");
        bar.find("div.progressbar-text,div.progressbar-value").css({
            height: bar.height() + "px",
            lineHeight: bar.height() + "px"
        });
    };

    $.fn.progressbar = function (_1eb, _1ec) {
        if (typeof _1eb == "string") {
            var _1ed = $.fn.progressbar.methods[_1eb];

            if (_1ed) {
                return _1ed(this, _1ec);
            }
        }
        _1eb = _1eb || {};
        return this.each(function () {
            var _1ee = $.data(this, "progressbar");

            if (_1ee) {
                $.extend(_1ee.options, _1eb);
            } else {
                _1ee = $.data(this, "progressbar", {
                    options: $.extend({}, $.fn.progressbar.defaults, $.fn.progressbar.parseOptions(this), _1eb),
                    bar: init(this)
                });
            }
            $(this).progressbar("setValue", _1ee.options.value);
            _1e8(this);
        });
    };

    $.fn.progressbar.methods = {
        options: function (jq) {
            return $.data(jq[0], "progressbar").options;
        },
        /**
         * 重新调整组建的尺寸
         * @param jq
         * @param size
         * @returns {*}
         */
        resize: function (jq, size) {
            return jq.each(function () {
                _1e8(this, size);
            });
        },
        /**
         * 获取组件的值
         * @param jq
         * @returns {*}
         */
        getValue: function (jq) {
            return $.data(jq[0], "progressbar").options.value;
        },
        /**
         * 设置组件的值
         * @param jq
         * @param value
         * @returns {*}
         */
        setValue: function (jq, value) {
            if (value < 0) {
                value = 0;
            }

            return jq.each(function () {
                var opts = $.data(this, "progressbar").options;
                var text = opts.text.replace(/{value}/, value);
                var _1f1 = opts.value;
                var percent = opts.percent;

                if (!percent) {
                    percent = 100;
                }
                opts.value = value;

                $(this).find("div.progressbar-value").width(percent + "%");
                $(this).find("div.progressbar-text").html(text);

                if (_1f1 != value) {
                    opts.onChange.call(this, value, _1f1);
                }
            });
        },
        /**
         * 设置进度条的百分比
         * @param jq
         * @param percent
         * @returns {*}
         */
        setPercent: function (jq, percent) {
            if (percent < 0) {
                percent = 0;
            }
            if (percent > 100) {
                percent = 100;
            }

            return jq.each(function () {
                var opts = $.data(this, "progressbar").options;
                var _percent = opts.percent;
                var text = opts.text.replace(/{value}/, opts.value);

                opts.percent = percent;

                $(this).find("div.progressbar-value").width(percent + "%");
                $(this).find("div.progressbar-text").html(text);
            });
        }
    };

    $.fn.progressbar.parseOptions = function (_1f2) {
        return $.extend({}, $.parser.parseOptions(_1f2, ["width", "height", "text", {value: "number"}]));
    };

    $.fn.progressbar.defaults = {
        width: "auto",
        height: 22,
        value: 0,
        percent: 100,
        text: "{value}%",
        onChange: function (newValue, oldValue) {

        }
    };
})(jQuery);

在以上代码中新增了一个方法setPercent,可以设置进度条的进度,用法为

/**
 * selector表示选择器,如id选择器、类选择器等等
 * percent表示百分比,范围0~100
*/
$(selector).progressbar("setPercent", percent);

当然,也可以像其他属性一样,渲染组件的时候就指定percent属性的值

$('#qixue').progressbar({
    width: 200,
    height: 22,
    percent: 50,
    value: 100,
    text: "{value}"
});

最后能实现的效果如下图

文章就分享到这了,感谢阅读~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐雨橙风ιτ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值