1

jqueryを使用して要素をクリックすると、現在の位置を基準にしてdivをスクロールしようとしています。しかし、3000ミリ秒後にスクロールする必要があるため、遅らせようとしました。クリック後、すぐに上部から 300 px スクロールするようになりました。もう一度クリックしても何も起こりません。

これはこれまでのコードです:

$('#scroll').click(function(){              
            $('.vluchtelinginfo').delay(3000).scrollTop(+300);
        });

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

4

3 に答える 3

4

使用に関する Brad M の推奨事項setTimeoutは、必要なものを取得する 1 つの方法です。scrollTop()jQuery が提供する「効果」には含まれていないため、効果のみに影響するdelay()ため、影響を受けません。delay()

ただし、animate()スクロールから効果を出すために使用することは可能です。たとえば、次のようにスクロールをアニメーション化する必要があります。

$scrollable.animate({scrollTop: x});

は「効果」なのでanimate()、 の影響を受けるはずdelay()です。したがって、次のことができます。

$scrollable.delay(3000).animate({scrollTop: x});

ただし、遭遇した別の問題があります。 whenscrollTop(x)が呼び出されるxのは絶対値であり、相対値ではありません。の呼び出しscrollTop(+300)は、 の呼び出しとまったく同じscrollTop(300)です。この+記号は、そのコンテキストでは特別な意味を持ちません。スクロールを相対的にしたい場合は、最初に以前の scrollTop 値を取得し、スクロールする相対距離をそれに追加する必要があります。例えば、

$scrollable.delay(3000).animate({scrollTop: $scrollable.scrollTop() + 300});

このフィドルは、上記の原則を機能させます。

于 2013-10-18T18:50:56.040 に答える
0

これはどのようにdelay()機能するかではありません。

あなたの場合、使用します

setTimeout(function() {
    $('.vluchtelinginfo').scrollTop(+300);
});

のドキュメントによるとdelay()

キュー内の後続のイベントのみが遅延されます。たとえば、これはエフェクト キューを使用しない .show() または .hide() の引数なしの形式を遅らせません。

于 2013-06-18T19:15:43.397 に答える
0

あなたはこのようなことを試すことができます...

$("#scroll").click(function () {
    setTimeout(function () {
        $(".vluchtelinginfo").css("top", $(".vluchtelinginfo").offset().top + 300);
    }, 3000);
});
于 2013-06-18T19:24:37.157 に答える