1

私は自分のhtmlページの中にこのコードを持っています。

  $('#buttonMenu').on('click',function(){
    var errDiv = $("#divWhichToMoveTo");
    errDiv.show();
    var pos = errDiv.position().top;
    $("html, body").animate({ scrollTop: pos });
  });


  <li><a id="buttonMenu" title="Yea" alt="Yea" href="#">Yea</a></li>

  <div id="divWhichToMoveTo"><strong>An error occured, oh noes!!</strong></div>

ユーザーが「buttonMenu」を押したときに、「divWhichToMoveTo」のポイントまでページを(ゆっくりと)スクロールさせることになっています。それは機能しますが、長いページ内にいくつかのボタンといくつかの div があります。時々、HTML ページの異なるポイントから別のポイントへと移動すると、アニメーションが開始する前に 1 ミリ秒の間、HTML ページの先頭が表示され、現在のポイントから着陸したいポイントに移動することができます。何か足りない?

4

3 に答える 3

3

代わりにこれを使用してください:

$('#buttonMenu').on('click', function (e) {
    e.preventDefault();
    var errDiv = $("#divWhichToMoveTo");
    errDiv.show(function () {
        $("html, body").animate({
            scrollTop: errDiv.offset().top
        }, 1000);
    });
});

e.preventDefault()に移動するデフォルトのアクションを防ぎます#。これがページジャンプの原因でした。

.position().top間違った値を返していました。これは.offset()、ドキュメントに対するオフセットを取得するためのものを使用し、完全に機能します。

デモ: http://jsfiddle.net/cEwQv/1/ (マージンが適用されたため、スクロールする場所がありました)

于 2013-06-26T14:12:30.963 に答える
-1

このようにミリ秒単位で時間を追加できます -->

   $("html, body").animate({ scrollTop: pos }, 2000)

私の記憶が正しければ、1000 ミリ秒は 1 秒と見なされます。

于 2013-06-26T14:11:37.330 に答える