• Bootstrap 时长选择器(依赖bootstrap的下拉菜单组件)


    前言

    日期时间选择器可以直接使用bootstrap-datetimepicker.js插件,但是却很难找到好用的时长选择器,什么是时长选择器呢?时间选择器和时长选择器的区别:

    时间选择器:选择24小时中某个时间点或者某段时间,datetimepicker效果如下:

    时长选择器:选择时分秒长度,例如录音时长为40:00:52即四十个小时长的录音。效果如下:

     

    实现的功能如下:

    1. focus输入框则显示时长选择器
    2. 点击时长选择器的确定按钮,则把三个时长显示到输入框中

    依赖

    1. Bootstrap4的css
    2. Jquery.js

    CSS

    /*没有多余的css,全都用的是bootstrap的布局,主要依赖bootstrap的下拉菜单的样式*/

    JS

    // 时长选择器(依赖bootstrap的下拉菜单组件)
    $('[data-plugin="durationpicker"]').each(function(){
      var elem = $(this);
      var input = elem.find('[data-toggle="dropdown"]');
      var drop = elem.find('.dropdown-menu');
      input.on('click', function(e){
        e.stopPropagation();
      });
      input.on('focus', function(e){
        elem.addClass('show');
        drop.addClass('show').css({
          'position': 'absolute',
          'transform': 'translate3d(0px, '+ (input.outerHeight(true)+4) +'px, 0px)',
          'top': '0px',
          'left': '0px',
          'will-change': 'transform'
        });
        setTimeout(function(){
          drop.find('input').eq(0).focus();
        },100);
      });
      $(document).on('click', function(e){
        elem.removeClass('show');
        drop.removeClass('show');
      });
      elem.on('shown.bs.dropdown', function () {
        drop.find('input').eq(0).focus();
      });
      if(elem.attr('data-autocount') == '1'){
        elem.on('hidden.bs.dropdown', function () {
          getres();
        });
      }
      drop.on('click', function(e){
        e.stopPropagation();
      })
      drop.find('input').on('focus', function(){
        if($(this).val()!=''){
          $(this).select();
        }
      });
      drop.find('button').on('click', function(){
        drop.removeClass('show');
        getres();
      });
      function getres(){
        var value = '';
        drop.find('input').each(function(i,e){
          value += $(e).val()<10 ? '0'+$(e).val(): $(e).val();
          if(i < 2){
            value += ':';
          }
        });
        input.val(value);
      }
    });

    HTML

    <!-- 时长输入组件 开始 -->
    <div class="dropdown" data-plugin="durationpicker" data-autocount="1">
      <input type="text" class="form-control form-control-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" placeholder="00:00:00" readonly="readonly">
      <div class="dropdown-menu p-1" style=" 280px;">
          <div class="d-flex">
              <div class="flex-fill"><input type="number" class="form-control form-control-sm" value="0" min="0" max="60"></div>
              <div class="px-2">:</div>
              <div class="flex-fill"><input type="number" class="form-control form-control-sm" value="0" min="0" max="60"></div>
              <div class="px-2">:</div>
              <div class="flex-fill"><input type="number" class="form-control form-control-sm" value="0" min="0" max="60"></div>
              <div class="pl-2"><button class="btn btn-primary btn-sm px-2">确定</button></div>
          </div>
      </div>
    </div>
    <!-- 时长输入组件 结束 -->

    效果就在上面展示的那样。

    备注:

    1. data-plugin="durationpicker":激活时长选择器功能
    2. data-autocount="1":是否自动计算输入的时长,为'1'时当选择器的下拉框关闭时,自动将选择的时长输入到输入框
    3. .dropdown-menu的宽度最好自己定好,而且不要太小,建议大于等于280px
  • 相关阅读:
    LUOGU P3355 骑士共存问题(二分图最大独立集)
    LUOGU P1453 城市环路(基环树+dp)
    BZOJ 1441 Min (裴蜀定理)
    LUOGU P1342 请柬(最短路)
    LUOGU P1186 玛丽卡
    LUOGU P2580 于是他错误的点名开始了(trie树)
    l洛谷 NOIP提高组模拟赛 Day2
    bzoj 4372 烁烁的游戏——动态点分治+树状数组
    bzoj 3730 震波——动态点分治+树状数组
    hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
  • 原文地址:https://www.cnblogs.com/mankii/p/11136775.html
Copyright © 2020-2023  润新知