5

基本上,我目前有一个 div 保持固定并在用户滚动时跟随用户向下滚动,直到达到某个点。我可以很容易地让它停在一个固定的像素位置,就像我在下面的例子中所做的那样,但是因为我是一个 jQuery 白痴,我不知道如何让它停在一个 div 上。

这是我到目前为止使用的:

var windw = this;

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

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

$('#one').followTo(400);

这是示例:jsFiddle

我希望它在到达第二个 div 时停止的原因是因为使用我使用的流畅布局,第二个 div 将根据浏览器大小坐在不同的点。为它定义一个特定的停止点是行不通的。任何人都知道如何让这个做我想做的事?或者,固定 div 是否有可能在达到向下的百分比时停止滚动?我环顾四周,但没有发现任何东西。

谢谢你的帮助。

4

2 回答 2

8

这是你要找的吗?

http://jsfiddle.net/Tgm6Y/1447/

var windw = this;

$.fn.followTo = function ( elem ) {
    var $this = this,
        $window = $(windw),
        $bumper = $(elem),
        bumperPos = $bumper.offset().top,
        thisHeight = $this.outerHeight(),
        setPosition = function(){
            if ($window.scrollTop() > (bumperPos - thisHeight)) {
                $this.css({
                    position: 'absolute',
                    top: (bumperPos - thisHeight)
                });
            } else {
                $this.css({
                    position: 'fixed',
                    top: 0
                });
            }
        };
    $window.resize(function()
    {
        bumperPos = pos.offset().top;
        thisHeight = $this.outerHeight();
        setPosition();
    });
    $window.scroll(setPosition);
    setPosition();
};

$('#one').followTo('#two');

编辑:关于您要求在某一点之前不滚动的请求,只需替换以下内容:

if ($window.scrollTop() > (bumperPos - thisHeight)) {

有了这个:

if ($window.scrollTop() <= (bumperPos - thisHeight)) {
于 2012-06-12T03:26:05.337 回答
2

受 MicronXD 的 fiddle 启发,但当 DOM 在文档加载(或其他原因)时被大量推送时,编写起来更加灵活,这是我为自己的使用开发的另一个类似解决方案:

jQuery.fn.extend({
  followTo: function (elem, marginTop) {
    var $this = $(this);
    var $initialOffset = $this.offset().top;
    setPosition = function() {
      if ( $(window).scrollTop() > $initialOffset ) {
        if ( elem.offset().top > ( $(window).scrollTop() + $this.outerHeight() + marginTop ) ) {
          $this.css({ position: 'fixed', top: marginTop });
        }
        if ( elem.offset().top <= ( $(window).scrollTop() + $this.outerHeight() + marginTop ) ) {
          $this.css({ position: 'absolute', top: elem.offset().top - $this.outerHeight() });
        }
      }
      if ( $(window).scrollTop() <= $initialOffset ) {
        $this.css({ position: 'relative', top: 0 });
      }
    }
    $(window).resize( function(){ setPosition(); });
    $(window).scroll( function(){ setPosition(); });
  }
});

然后您可以像这样运行该函数:

$('#div-to-move').followTo( $('#div-to-stop-at'), 60);

60 是您希望浮动元素在位置时从屏幕顶部具有的可选边距:固定,以像素表示。

于 2013-06-13T02:01:20.423 回答