【问题标题】:Stop jQuery fixed position scrolling when bottom of scrolling element reaches bottom of parent element当滚动元素的底部到达父元素的底部时,停止 jQuery 固定位置滚动
【发布时间】:2017-11-07 18:00:50
【问题描述】:

我有两列——在大多数情况下都比父元素长——所以默认情况下,一开始它们都应该是可滚动的。当它到达父级的顶部时,较短的应该停止滚动。

如果较短的列比父列长:当较短的列('sdidebar')的末端变得可见时,它应该停止滚动。

据我所知,我的问题/我的问题与(已回答的)SE 问题“Stop jQuery fixed position scrolling when bottom of scrolling element reaches end of parent element”非常接近,因此我选择了类似的名称。唯一的区别/问题:较短的列总是停在父级的顶部——即使它比父级长——所以该列的其余部分将保持不可见。上述“原始”问题的解决方案建议使用以下 jQuery 代码:

$(window).scroll(function(){
    $("#theFixed").css("top",Math.max(0,450-$(this).scrollTop()));
});

正如我上面提到的,我想要的是较短的“侧边栏内容”在其末端到达父元素的底部时停止,如果它实际上比父元素长。如果它比父级短,它应该只粘在父级的顶部并且根本不可滚动。这里有两个这样的列 - 但滚动总是在顶部停止:

http://jsfiddle.net/1nkhc90k/

$(window).scroll(function(){
    $("#theFixed").css("top",Math.max(0,250-$(this).scrollTop()));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="theFixed" style="position:fixed;top:250px;background-color:red">SOMETHING</div>

STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>

我尝试了以下修改 - 但没有成功:

$(window).scroll(function(){
    $("#theFixed").css("bottom",Math.max(0,450-$(this).scrollTop()));
});

我知道我应该检查每列的长度 - 但我无法真正将各个部分拼凑在一起。我希望有人以前做过这个?任何建议表示赞赏。谢谢!!

【问题讨论】:

  • 我知道它不能回答你的问题,但为什么不使用像 Sticky-Kit 这样的现有插件呢?或者我可能误解了你的问题。
  • 哦!哇!!谢谢!!
  • 经过一番挖掘,我发现 Sticky-Kit 似乎只能在固定高度下正常工作——所以我不能真正使用它。太糟糕了——一开始看起来很有希望。
  • 嗯,我从来没有遇到过关于sticky-kit的height问题,你能详细说明问题吗?甚至可能值得在一个新问题中提出。

标签: javascript jquery html css scroll


【解决方案1】:

这是你需要的吗? http://jsfiddle.net/1nkhc90k/2/

$(window).scroll(function(){
    $("#theFixed").css("top",Math.min($(this).scrollTop()+150, $(window).height() - 20));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="theFixed" style="position:fixed;top:150px;background-color:red">SOMETHING</div>

STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>

【讨论】:

  • 这看起来也很漂亮!但在这一点上,我正在寻找的不是……:/谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 2020-03-09
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多