粘性浮动条:准确位置

时间:2017-12-19 20:40:53

标签: javascript jquery html css sticky-footer

我正在寻找更好的粘杆问题解决方案。

' -----'在第二和第二之间第3个框是粘性条应显示的阈值。当它显示时,它完全重叠第3个框。

在真正的解决方案中,我使用jquery添加了css(margin-top)来推送下面的元素;但问题是它在Firefox中落后了。人们可以在UI上看到这个空间几秒钟。

实现输出的最佳解决方案是什么(或避免使用margin-top)?



$(document).ready(function(){
  
  function toggleDock() {
   
    if($(window).scrollTop() >= $('.second').offset().top+$('.second').height()) {
      $('.sticky').show();
    }
    else {
      $('.sticky').hide();
    }
  }
  
  $(window).bind('scroll',toggleDock);
});

.box {
  border: 1px dotted red;
  height: 100px;
  width: auto;
  margin: 20px 0;
}
 .sticky {
   height: 80px;
   border: 1px dotted green;
   margin: 20px 0;
   display: none;
   position: sticky;
   top: 20px;
   background: green;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body class='page docked'>
<div class='sticky'>
 </div>
  
<div class='box'>
  First 
</div>
<div class='box second' >
  2nd
</div>

  -------
<div class='box'>
  3rd
</div>
<div class='box'>
  4th
</div>
<div class='box'>
  5th
</div>
<div class='box'>
  6th
</div>
<div class='box'>
  7th
</div>
<div class='box'>
  8th
</div>
  
  
</body>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

这是由于position: sticky。另外使用position: fixed会对您有所帮助。

.sticky {
  height: 80px;
  border: 1px dotted green;
  margin: 20px 0;
  display: none;
  top: 20px;
  background: green;

  position: fixed;
  width: calc(100% - 40px); /* subtract the 20px taken by the left and right margins */

}

答案 1 :(得分:0)

更新的答案

我认为您需要将sticky div保持在正常流程中,position: sticky可能不是正确的选择。这是一个例子:

$(document).ready(function(){
  
  function toggleDock() {
   
    if($(window).scrollTop() >= $('.second').offset().top+$('.second').height()) {
      $('.sticky').show();
    }
    else {
      $('.sticky').hide();
    }
  }
  
  $(window).bind('scroll',toggleDock);
});
.box {
  border: 1px dotted red;
  height: 100px;
  width: auto;
  margin: 20px 0;
}
.sticky {
  height: 100px;
  border: 1px dotted green;
  margin: 20px 0;
  top: 40px;
  display: none;
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body class='page docked'>
  
<div class='box'>
  First 
</div>
<div class='box second' >
  2nd
</div>

  -------
<div class='sticky'>
</div>

<div class='box'>
  3rd
</div>
<div class='box'>
  4th
</div>
<div class='box'>
  5th
</div>
<div class='box'>
  6th
</div>
<div class='box'>
  7th
</div>
<div class='box'>
  8th
</div>
  
  
</body>

关于CSS流程的一个很好的文档:http://marksheet.io/css-the-flow.html

position: sticky在那里没有详细说明,但是从this document开始,您会看到sticky元素在其可见时相对于其包含元素定位,并变为fixed当它的包含元素不可见时(即,它从普通文档流中取出):

  

粘性定位元素是计算出的位置值为粘性的元素。它被视为相对定位,直到其包含块超过指定的阈值,此时它被视为固定。

希望这有帮助!