zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    liunx定时任务执行
    spark-stream简单使用案例
    spark的UDF操作,RDD与DataFrame转换,RDD DataFrame DataSet的分析
    uni-app:text文本组件是行内元素,如何让标题居中显示?
    报错:java.math.BigDecimal cannot be cast to java.lang.String(oracle数据库中的number类型数据,java查询出来的对象属性数据类型其实为BigDecimal)
    uni-app封装请求方法
    in和exists比较
    人写的SQL与机读SQL的顺序
    spring cloud组件之Feign:Feign内置的Ribbon把Rest的请求进行隐藏并基于某种负载均衡算法自动发起请求,而Feign伪装成类似Controller一样来拼接url
    spring cloud组件之Hystrixi:通过服务降级即返回一个结果来隔离访问远程服务,防止出现级联失败
  • 原文地址:https://www.cnblogs.com/mankii/p/11136775.html
Copyright © 2011-2022 走看看