我是靠谱客的博主 自觉宝贝,最近开发中收集的这篇文章主要介绍timepicker时间选择控件 时:分:秒,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

timepicker时间选择控件1.0
时间控件
结构:

<!--html 部分-->
 <div class="timepicker-box" style="width:120px;">
    <input type="text" class="time-ipt" style="width:120px;" value="10:00">
  </div>
  <script src="js/jquery-1.12.3.min.js"></script>
  <script src="js/sfs-timepicker.js"></script>
  

使用方法:

//javascript:
$(function () {
   $('.timepicker-box').timepicker({
       'format': 'h:mm',
        afterChange: function (time) {
            console.log(time);
        }
    });
 });

插件主要代码:

//插件主要代码:
/**
 * Created by Kevin on 2020/5/27.
 */
/**
 *  * html 部分结构为 

    * <div class="timepicker-box">
    *    <input type="text" class="time-ipt">
    * </div>
    
 *  * css 部分单独引入
 * 
 * 使用方法 $.fn.timePicker(option);
 * 
 * @param afterChange(arg)  function  确认后回调 arg 为回传的 time
 * 
 * 时间选择控件对象曝露 在 $(ele) 下的data属性对象的 _timepicker 属性中
   *$(ele).data('_timerpicker').update();可以更新 时间选择控件的 默认时间 
 *
 * v1.0,后续再扩展。
 */
; (function (factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory);
    }
    else if (typeof exports === 'object') {
        module.exports = factory();
    }
    else {
        factory();
    }
}(function () {

    function plugin(ele, options) {
        var _default = {
            format: 'hh',
            afterChange: function (time) {
                console.log('afterChange!!:' + time);
            }
        }
        this.settings = $.extend({}, options);
        this.ishh = !!/^h{1,2}$/i.exec(this.settings.format) || !this.settings.format;
        this.ishh_mm = !!/^h{1,2}:m{1,2}$/i.exec(this.settings.format)
        this.ishh_mm_ss = !!/^h{1,2}:m{1,2}:s{1,2}$/i.exec(this.settings.format);
        this.ele = ele;
        this.init();
    }
    plugin.prototype.init = function () {
        this.rendPickBox();
        this.timerpickEvent();
    }
    plugin.prototype.rendPickBox = function () {

        var ele = this.ele;
        var time_box_con = '<span class="time-h">00</span>', picker_box_con = '<div class="picker-item item-h"></div>';
        if (this.ishh_mm) {
            time_box_con = '<span class="time-h">00</span> :
                            <span class="time-m">00</span>';
            picker_box_con = '<div class="picker-item item-h"></div>
            <div class="picker-item item-m"></div>';
        } else if (this.ishh_mm_ss) {
            time_box_con = '<span class="time-h">00</span> :
            <span class="time-m">00</span>
            <span class="time-s">00</span>';
            picker_box_con = '<div class="picker-item item-h"></div>
            <div class="picker-item item-m"></div>
            <div class="picker-item item-s"></div>';
        }
        this.timePicker = $('<div class="time-picker">
        <div class="picker-title">
            <span class="picker-txt">时间选择</span>
            <a class="picker-entrue-btn" href="javascript:;">确定</a>
        </div>
        <div class="picker-content">
            <div class="time-box">
                    '+ time_box_con + '
                </div>
                <div class="picker-box">
                    '+ picker_box_con + '
                </div>
            </div>
        </div>');

        this.timeBox = this.timePicker.find('.time-box');
        this.pickerBox = this.timePicker.find('.picker-box');

        var hHtml = msHtml = '';
        for (var i = 0; i < 24; i++) {

            hHtml += '<span>' + (i > 9 ? i : '0' + i) + '</span>'
        }
        for (var i = 0; i < 60; i++) {

            msHtml += '<span>' + (i > 9 ? i : '0' + i) + '</span>'
        }

        $(ele).append(this.timePicker).css({
            'position': 'relative',
        });
        this.timePicker.find('.item-h').append(hHtml);
        this.timePicker.find('.item-m,.item-s').append(msHtml);
        this.update();
    }
    plugin.prototype.update = function () {
        var ele = this.ele;
        this.hh = this.mm = this.ss = '00';
        var timeiptArr = [];
        var timeiptVal = $(ele).find('.time-ipt').val();
        if (!!timeiptVal) {
            timeiptArr = $(ele).find('.time-ipt').val().split(':');
            this.hh = timeiptArr[0];
            this.timeBox.find('.time-h').text(this.hh)
        } else {
            return;
        }
        if (this.ishh_mm || this.ishh_mm_ss) {
            this.mm = timeiptArr[1];
            this.timeBox.find('.time-m').text(this.mm)
        }
        if (this.ishh_mm_ss) {
            this.ss = timeiptArr[2];
            this.timeBox.find('.time-s').text(this.ss)
        }
    }
    plugin.prototype.timerpickEvent = function () {
        var _self = this;
        var ele = _self.ele;
        _self.timePicker.on('click', '.time-box span', function (e) {
            var e = e || window.event;
            var index = $(this).index();
            var txt = $(this).text();
            _self.pickerBox.find('.picker-item').eq(index).toggleClass('item-current').siblings().removeClass('item-current');
            _self.pickerBox.find('.picker-item').eq(index).find('span').each(function () {
                if (this.innerText == txt) {
                    $(this).addClass('cur').siblings().removeClass('cur');
                }
            })
        }).on('click', '.picker-box span', function (e) {
            var e = e || window.event;
            var txt = $(this).text();
            var index = $(this).parent().index();
            $(this).addClass('cur').siblings().removeClass('cur');
            $(this).parent().removeClass('item-current');
            _self.timeBox.find('span').eq(index).text(txt);
        });
        $(ele).on('click focus', '.time-ipt', function () {
            $(this).siblings('.time-picker').show();
        }).on('click', '.picker-entrue-btn', function (e) {
            var e = e || window.event;
            e.stopPropagation()
            _self.time = _self.timeBox.find('.time-h').text();
            if (_self.ishh_mm || _self.ishh_mm_ss) {
                _self.time += ':' + _self.timeBox.find('.time-m').text();
            }
            if (_self.ishh_mm_ss) {
                _self.time += ':' + _self.timeBox.find('.time-s').text();

            }
            _self.timePicker.siblings('.time-ipt').val(_self.time).text(_self.time);
            _self.timePicker.hide();
            _self.settings.afterChange(_self.time);

        });
        $('body').on('click', function (e) {
            var e = e || window.event;
            var tag = e.target;
            var overPickerBox = $(tag).closest('.picker-box,.time-box').length == 1;
            var overTimePickerBox = $(tag).closest('.timepicker-box').length == 1;
            $('.time-picker').hide();
            if (overTimePickerBox) {
                $(tag).closest('.timepicker-box').find('.time-picker').show();
            }
            if (!overPickerBox) {
                $(ele).find('.picker-box .item').removeClass('item-current');
            }

        });

    }
    $.fn.timepicker = function (options) {
        var ele = this;
        var timepick = options;
        $(ele).each(function () {
            if (!$(this).data('time-picker')) {
                $(this).data('time-picker', timepick);
            }

            if (!$(this).data('_time-picker')) {
                $(this).data('_time-picker', new plugin(this, options));
            }
        });
    }


}))

css 代码:

.time-picker {
  position: absolute;
  background: #fff;
  box-shadow: 0 0 5px 0px #ccc;
  padding: 10px 20px;
  border-radius: 5px;
  border: 1px solid #ddd;
  color: #333;
  top: 100%;
  margin-top: 2px;
  z-index: 99;
  display: none; }
.time-picker .picker-title {
  border-bottom: 1px solid #ccc;
  position: relative;
  width: 150px; }
.time-picker .picker-title .picker-txt {
  line-height: 2em;
  font-weight: bold;
  font-size: 16px; }
.time-picker .picker-title .picker-entrue-btn {
  line-height: 24px;
  background-color: #09f;
  width: 60px;
  font-size: 12px;
  color: #fff;
  text-decoration: none;
  text-align: center;
  border-radius: 3px;
  display: inline-block;
  position: absolute;
  right: 0;
  top: 3px; }
.time-picker .picker-title .picker-entrue-btn:active {
  background-color: #06f; }
.time-picker .picker-content {
  padding: 10px 0;
  width: 150px; }
.time-picker .time-box {
  text-align: center; }
.time-picker .time-box span {
  display: inline-block;
  background-color: #f1f2f3;
  width: 40px;
  height: 40px;
  line-height: 40px;
  text-align: center;
  font-size: 16px;
  cursor: pointer;
  color: #09f;
  font-weight: bold; }
.time-picker .picker-box {
  position: absolute;
  left: 0;
  top: 90px;
  width: 100%; }
.time-picker .picker-box .picker-item {
  padding: 5px;
  border: 1px solid #ccc;
  height: 100%;
  display: none;
  overflow: hidden;
  transition-duration: 1s;
  opacity: .5;
  margin: 0 auto;
  background: #fff;
  box-sizing: content-box; }
.time-picker .picker-box .picker-item.item-current {
  display: block;
  opacity: 1;
  margin-top: 0; }
.time-picker .picker-box .picker-item.item-h {
  width: 144px; }
.time-picker .picker-box .picker-item.item-m, .time-picker .picker-box .picker-item.item-s {
  width: 288px; }
.time-picker .picker-box span {
  width: 22px;
  height: 22px;
  display: block;
  float: left;
  text-align: center;
  line-height: 22px;
  font-size: 12px;
  background-color: #f1f2f3;
  margin: 1px;
  cursor: pointer; }
.time-picker .picker-box span:hover, .time-picker .picker-box span.cur {
  background-color: #09f;
  color: #fff; }

/*# sourceMappingURL=sfs-timepicker.css.map */

最后

以上就是自觉宝贝为你收集整理的timepicker时间选择控件 时:分:秒的全部内容,希望文章能够帮你解决timepicker时间选择控件 时:分:秒所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部