2

最近、他の誰かがこの質問の開始を手伝ってくれましたが、私はもう少し助けを求めています。私は現在これを機能させています-

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をdivで開始し、次に下にスクロールして別のdivで停止する方法です。誰かアイデアがありますか?

これはひどいイラストです-jsFiddle。青いセクションは、黄色のセクションに到達するまでその下に配置する必要があります。脳機能が限られているため、それがどのように可能か理解できません。

助けてくれてありがとう。

4

1 に答える 1

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

于 2012-06-12T09:59:32.217 に答える