2012-06-12 98 views
2

最近有人帮助我解决了这个问题的开始,但是我得到了更多的帮助。目前,我有这个工作 -在其他两个div之间启动和停止div滚动

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'); 

例在这里 - jsFiddle

这从滚动一旦达到另一个div的边界停止一个div - 伟大工程。我现在试图弄清楚的是我怎样才能让div的START滚动,然后向下滚动并停在另一个div上,就像它在这个例子中一样。任何人有任何想法?

下面是它的一个可怕的例子 - jsFiddle。蓝色部分应该坐在黄色部分的下面,直到你到达它。由于我的大脑功能有限,我无法弄清楚这种可能性。

非常感谢您的帮助。

回答

3

添加另一个参数,以你的函数传递开始元素,然后设置你的函数里面的一些增值经销商来存储它的offset().top + height()作为起始位置,然后添加另一if来检查scrollTop()值不是开始一个较低的,像这样:

var windw = this; 

$.fn.followTo = function (from, bumper) { //renamed "elem" to "bumper", to 
    var $this = this,      //prevent ambiguity 
     $window = $(windw), 
     $from = $(from), 
     $bumper = $(bumper), 
     $startPos = $from.offset().top + $from.height(), //new start position 
     bumperPos = $bumper.offset().top, 
     thisHeight = $this.outerHeight(), 
     setPosition = function(){ 
      if ($window.scrollTop() < $startPos) { //new if < startPos 
       $this.css({ 
        position: 'absolute', 
        top: $startPos //resets element to start position 
       }); 
      } else 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('#half', '#two'); 

JSFiddle

+0

啊,这是绝对完美的。非常感谢,我一直坚持这一点。传说。 – mattmouth

+0

我知道这是一个旧主题,Fabricio,但我正在使用您的代码并遇到问题。你可以(或其他人)帮忙吗?请看这里:https://jsfiddle.net/fLyrg57t/20/ – Eddy

+0

@Eddy我不太清楚你遇到了什么问题,如果你仍然遇到问题,请发布一个新问题,以便我或其他人可能会能够帮助。 :) –