zoukankan      html  css  js  c++  java
  • easyui源码翻译1.32--TimeSpinner(时间微调)

    前言

    扩展自$.fn.spinner.defaults。使用$.fn.timespinner.defaults重写默认值对象。下载该插件翻译源码

    时间微调组件的创建基于微调组件。它和数字微调类似,但是显示的时间值。时间微调组件允许用户点击组件右侧的小按钮来增加或减少时间

    源码

    /**
     * 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="80px;">
    </body>
    </html>
    View Code

    插件效果

    热爱编程,热爱技术,热爱生活
  • 相关阅读:
    CentOS系统一键部署jdk,maven,tomcat,mysql
    使用sed在源文件上直接替换某一行的内容,只替换第一次找到的那行
    MLPerf 机器学习基准测试实战入门(一)NAVIDA-GNMT
    SpringBoot Controller接收参数的几种常用方式(转)
    使用延时队列DelayQueue
    Oracle、MySql、SQLServer 数据分页查询(转)
    SqlServer收缩日志
    防火墙升级导致产环境服务中止20小时的问题
    NFS相关
    jquery.validate不使用submit提交,而是使用button按钮提交
  • 原文地址:https://www.cnblogs.com/DemoLee/p/3501100.html
Copyright © 2011-2022 走看看