在某一点停止固定位置滚动?

Lou*_*key 89 css jquery positioning

我有一个位置的元素:固定,因此滚动页面我不知道如何.当用户向上滚动时,我希望元素在某一点停止滚动,比如当它距离页面顶部250px时,这可能吗?任何帮助或建议都会有所帮助,谢谢!

我有一种感觉,我需要使用jquery这样做.我尝试获取用户所在位置的滚动或位置,但真的很困惑,是否有任何jquery解决方案?

Jam*_*gne 133

你的意思是这样吗?

http://jsfiddle.net/b43hj/

$(window).scroll(function(){
    $("#theFixed").css("top", Math.max(0, 250 - $(this).scrollTop()));
});
Run Code Online (Sandbox Code Playgroud)

$(window).scroll(function(){
    $("#theFixed").css("top", Math.max(0, 100 - $(this).scrollTop()));
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div id="theFixed" style="position:fixed;top:100px;background-color:red">SOMETHING</div>

<!-- random filler to allow for scrolling -->
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>
Run Code Online (Sandbox Code Playgroud)


mVC*_*Chr 120

这是我刚刚编写的一个快速jQuery插件,它可以满足您的需求:

$.fn.followTo = function (pos) {
    var $this = this,
        $window = $(window);

    $window.scroll(function (e) {
        if ($window.scrollTop() > pos) {
            $this.css({
                position: 'absolute',
                top: pos
            });
        } else {
            $this.css({
                position: 'fixed',
                top: 0
            });
        }
    });
};

$('#yourDiv').followTo(250);
Run Code Online (Sandbox Code Playgroud)

见工作示例→

  • `$('window')`不应该在引号中.但是,多亏了这一点,它非常有用. (3认同)

big*_*dog 19

这是一个完整的jquery插件,可以解决这个问题:

https://github.com/bigspotteddog/ScrollToFixed

这个插件的描述如下:

此插件用于将元素固定到页面顶部,如果元素将垂直滚出视图; 但是,它确实允许元素继续向左或向右移动水平滚动.

给定选项marginTop,一旦垂直滚动到达目标位置,元素将停止垂直向上移动; 但是,当页面向左或向右滚动时,元素仍将水平移动.页面向下滚动到目标位置后,元素将恢复到页面上的原始位置.

此插件已在Firefox 3/4,Google Chrome 10/11,Safari 5和Internet Explorer 8/9中进行了测试.

用于您的特定情况:

<script src="scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="scripts/jquery-scrolltofixed-min.js" type="text/javascript"></script>

$(document).ready(function() {
    $('#mydiv').scrollToFixed({ marginTop: 250 });
});
Run Code Online (Sandbox Code Playgroud)


Jii*_*iiB 7

一个可能的CSS ONLY解决方案可以通过position: sticky;

浏览器支持实际上非常好:https : //caniuse.com/#search=position%3A%20sticky

这是一个例子:https : //jsfiddle.net/0vcoa43L/7/

  • 不幸的是不适用于 IE11 (2认同)
  • 这是一个非常好的和简单的解决方案,我花了一些时间才理解它,但关键之一实际上是父元素需要一个高度。在我的例子中,应该粘性的子元素是浮动的,因此父元素最初没有高度。/sf/answers/336376001/ 让我走上正确的轨道,在父级上使用“display: flex;”。 (2认同)

小智 6

你可以在他的回答中做James Montagne用他的代码做的事情,但这会使它在Chrome中闪烁(在V19中测试).

你可以解决这个问题,如果你把"margin-top"而不是"top".真的不知道为什么它适用于margin.

$(window).scroll(function(){
    $("#theFixed").css("margin-top",Math.max(-250,0-$(this).scrollTop()));
});
Run Code Online (Sandbox Code Playgroud)

http://jsbin.com/idacel