固定侧边栏还修复了datepicker下拉列表。怎么解决?

时间:2017-10-19 05:20:44

标签: javascript jquery html css datepicker

我有一个非常简单的页面,页面左侧有一个固定的侧边栏。在右侧,在内容区域,我有一个日期选择器。但是当我滚动右边的主要内容时,我不希望侧边栏上下移动。所以我用以下CSS修复了内容区域:

.content {
    overflow: auto;
    height: 100%;
}

但问题是,由于上面的CSS,当日期选择器在内容区域中打开时,它在滚动期间不会移动。这是一个完整的例子: Fiddle

滚动时日期选择器不随字段移动。我该如何解决?还有什么办法可以在输入字段的上方或下方动态打开它,具体取决于浏览器的屏幕区域? (就像目前它在右上方区域打开一样,即使它被设置为pickerPosition: 'top-right'也无法完全看到。这非常不方便。)

提前感谢您的建议。

3 个答案:

答案 0 :(得分:2)

使用滚动事件和一些数学

$('.content').on('scroll',function(){
   var offset = $('#datetimepicker').offset().top;//get the offset of the element 
   $('.datetimepicker').css({'top':offset-$('.datetimepicker').height()-20});//set the offset to the picker modal subtract its height and the input height
});

演示:https://jsfiddle.net/xyxrrkoa/3/

答案 1 :(得分:1)

我建议在滚动期间关闭datetimepicker是个更好的主意。就像用户点击其他内容或滚动条一样。

   $(".content").scroll(function() {
      if ($(".datetimepicker").css("display") == "block")
          $(".datetimepicker").css("display", "none");
  });

答案 2 :(得分:1)

使侧边栏固定并具有静态宽度,然后将带有侧边栏宽度的左边距应用于内容。并且不需要浮动,因为侧边栏元素已经与剩余的DOM(固定位置)位于单独的层上

$(document).ready(function() {
  $('.form_datetime').datetimepicker({
    weekStart: 1,
    todayBtn: 1,
    autoclose: 1,
    todayHighlight: 1,
    startView: 2,
    forceParse: 0,
    showMeridian: 1,
    pickerPosition: 'top-right',
  });
});
html,
body {
  padding: 0;
  margin: 0;
}

.wrapper {
  position: relative;
  top: 0;
  left: 0;
  height: 100vh;
  width: 100vw;
}

.sidebar {
  position: fixed;
  width: 120px;
  top: 0;
  bottom: 0;
  left: 0;
  background-size: cover;
  background-position: center center;
}

.content {
  position: relative;
  margin-left: 120px;
  width: calc(100vw - 120px);
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/smalot-bootstrap-datetimepicker/2.4.4/css/bootstrap-datetimepicker.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/smalot-bootstrap-datetimepicker/2.4.4/js/bootstrap-datetimepicker.min.js"></script>
<div class="wrapper">
  <div class="sidebar">
    <div class="sidebar-wrapper">
      <p>Sidebar</p>
    </div>
  </div>
  <div class="content">
    <p>
      ||<br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br>
    </p>
    <div class="form-group">
      <label for="name" class="col-md-2">Date</label>
      <div class="col-md-5">
        <div class="input-group date form_datetime" id="datetimepicker">
          <input class="form-control" size="16" type="text" value="" readonly>
          <span class="input-group-addon"><span class="fa fa-times-circle"></span></span>
          <span class="input-group-addon"><span class="fa fa-calendar"></span></span>
        </div>
      </div>
    </div>
    <p>
      ||<br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br> ||
      <br>
    </p>
  </div>
</div>