easyui源碼翻譯1.32--TimeSpinner(時間微調)

前言

擴展自$.fn.spinner.defaults。使用$.fn.timespinner.defaults重寫默認值對象。下載該插件翻譯源碼javascript

時間微調組件的建立基於微調組件。它和數字微調相似,可是顯示的時間值。時間微調組件容許用戶點擊組件右側的小按鈕來增長或減小時間css

源碼

/**
 * jQuery EasyUI 1.3.2
 * qq:1364386878
 *日期微調
 *
 */
(function ($) {
    //初始化timeSpinner
    function init(jq) {
        var options = $.data(jq, "timespinner").options;
        $(jq).addClass("timespinner-f");
        $(jq).spinner(options);
        $(jq).unbind(".timespinner");
        $(jq).bind("click.timespinner", function () {
            var start = 0;
            if (this.selectionStart != null) {
                start = this.selectionStart;
            } else {
                if (this.createTextRange) {
                    var range = jq.createTextRange();
                    var s = document.selection.createRange();
                    s.setEndPoint("StartToStart", range);
                    start = s.text.length;
                }
            }
            if (start >= 0 && start <= 2) {
                options.highlight = 0;
            } else {
                if (start >= 3 && start <= 5) {
                    options.highlight = 1;
                } else {
                    if (start >= 6 && start <= 8) {
                        options.highlight = 2;
                    }
                }
            }
            highlight(jq);//初始選中的字段
        }).bind("blur.timespinner", function () {
            _setValue(jq);//設置時間微調組件的值
        });
    };
    //初始選中的字段
    function highlight(jq) {
        var options = $.data(jq, "timespinner").options;
        var start = 0, end = 0;
        if (options.highlight == 0) {
            start = 0;
            end = 2;
        } else {
            if (options.highlight == 1) {
                start = 3;
                end = 5;
            } else {
                if (options.highlight == 2) {
                    start = 6;
                    end = 8;
                }
            }
        }
        if (jq.selectionStart != null) {
            jq.setSelectionRange(start, end);
        } else {
            if (jq.createTextRange) {
                var range = jq.createTextRange();
                range.collapse();
                range.moveEnd("character", end);
                range.moveStart("character", start);
                range.select();
            }
        }
        $(jq).focus();
    };
    //解析時間
    function parseTime(jq, value) {
        var options = $.data(jq, "timespinner").options;
        if (!value) {
            return null;
        }
        var separators = value.split(options.separator);
        for (var i = 0; i < separators.length; i++) {
            if (isNaN(separators[i])) {
                return null;
            }
        }
        while (separators.length < 3) {
            separators.push(0);
        }
        return new Date(1900, 0, 0, separators[0], separators[1], separators[2]);
    };
    // 設定timespinner的值
    function _setValue(jq) {
        var options = $.data(jq, "timespinner").options;
        var val = $(jq).val();
        var time = parseTime(jq, val);
        if (!time) {
            time = parseTime(jq, options.value);
        }
        if (!time) {
            options.value = "";
            $(jq).val("");
            return;
        }
        var minTime = parseTime(jq, options.min);
        var maxTime = parseTime(jq, options.max);
        if (minTime && minTime > time) {
            time = minTime;
        }
        if (maxTime && maxTime < time) {
            time = maxTime;
        }
        var tt = [minTime(time.getHours()), minTime(time.getMinutes())];
        if (options.showSeconds) {
            tt.push(minTime(time.getSeconds()));
        }
        var val = tt.join(options.separator);
        options.value = val;
        $(jq).val(val);
        function minTime(value) {
            return (value < 10 ? "0" : "") + value;
        };
    };
    //用戶點擊spinner按鈕觸發一個方法
    function clickSpinner(jq, down) {
        var options = $.data(jq, "timespinner").options;
        var val = $(jq).val();
        if (val == "") {
            val = [0, 0, 0].join(options.separator);
        }
        var separators = val.split(options.separator);
        for (var i = 0; i < separators.length; i++) {
            separators[i] = parseInt(separators[i], 10);
        }
        if (down == true) {
            separators[options.highlight] -= options.increment;
        } else {
            separators[options.highlight] += options.increment;
        }
        $(jq).val(separators.join(options.separator));
        _setValue(jq);
        highlight(jq);
    };
    //實例化函數
    $.fn.timespinner = function (options, param) {
        if (typeof options == "string") {
            var method = $.fn.timespinner.methods[options];
            if (method) {
                return method(this, param);
            } else {
                return this.spinner(options, param);
            }
        }
        options = options || {};
        return this.each(function () {
            var timespinner = $.data(this, "timespinner");
            if (timespinner) {
                $.extend(timespinner.options, options);
            } else {
                $.data(this, "timespinner", {
                    options: $.extend({}, $.fn.timespinner.defaults,
                        $.fn.timespinner.parseOptions(this), options)
                });
                init(this);
            }
        });
    };
    //默認方法
    $.fn.timespinner.methods = {
        //返回屬性對象
        options: function (jq) {
            var options = $.data(jq[0], "timespinner").options;
            return $.extend(options, {
                value: jq.val(),
                originalValue: jq.spinner("options").originalValue
            });
        },
        //設置時間微調組件的值
        setValue: function (jq, value) {
            return jq.each(function () {
                $(this).val(value);
                _setValue(this);
            });
        },
        //設置時間微調組件的值
        getHours: function (jq) {
            var options = $.data(jq[0], "timespinner").options;
            var separators = jq.val().split(options.separator);
            return parseInt(separators[0], 10);
        },
        //獲取當前的分鐘數
        getMinutes: function (jq) {
            var options = $.data(jq[0], "timespinner").options;
            var separators = jq.val().split(options.separator);
            return parseInt(separators[1], 10);
        },
        //獲取當前的秒數
        getSeconds: function (jq) {
            var options = $.data(jq[0], "timespinner").options;
            var separators = jq.val().split(options.separator);
            return parseInt(separators[2], 10) || 0;
        }
    };
    //解析器參數
    $.fn.timespinner.parseOptions = function (target) {
        return $.extend({}, $.fn.spinner.parseOptions(target),
            $.parser.parseOptions(target,
            ["separator", { showSeconds: "boolean", highlight: "number" }]));
    };
    //默認屬性和事件  並繼承spinner
    $.fn.timespinner.defaults = $.extend({},
        $.fn.spinner.defaults, {
            separator: ":",//定義在小時、分鐘和秒之間的分隔符
            showSeconds: false,//定義是否顯示秒鐘信息
            highlight: 0,//初始選中的字段 0=小時,1=分鐘.
            //在用戶點擊微調按鈕的時候調用的函數。'down'參數對應用戶點擊的向下按鈕
            spin: function (down) {
                clickSpinner(this, down);
        }
    });
})(jQuery);
View Code

 

示例代碼

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Basic TimeSpinner - jQuery EasyUI Demo</title>
    <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="../../themes/icon.css">
    <link rel="stylesheet" type="text/css" href="../demo.css">
    <script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
    <script src="../../plugins2/jquery.parser.js"></script>
    <script src="../../plugins2/jquery.validatebox.js"></script>
    <script src="../../plugins2/jquery.spinner.js"></script>
    <script src="../../plugins2/jquery.timespinner.js"></script>
</head>
<body>
    <h2>Basic TimeSpinner</h2>
    <div class="demo-info">
        <div class="demo-tip icon-tip"></div>
        <div>Click spin button to adjust time.</div>
    </div>
    <div style="margin:10px 0;"></div>
    <input class="easyui-timespinner" style="width:80px;">
</body>
</html>
View Code

 

插件效果

相關文章
相關標籤/搜索