JQuery $ .scrollTo()関数を使用してウィンドウをスクロールする方法


98

ユーザーがドキュメントの上部に近づくたびに100pxスクロールダウンしようとしています。

ユーザーがドキュメントの上部に近づいたときに関数を実行していますが、.scrollTo関数が機能していません。

アラートを前後に配置して、それが実際に回線であったかどうかを確認し、それが停止していたことを確認しました。最初のアラートのみがオフになりました。コードは次のとおりです。

alert("starting");
$.scrollTo({ top: '+=100px', left: '+=0px' }, 800);
alert("finished");

他の多くのjquery関数を使用していて、すべて正常に機能しているため、jqueryページが適切にリンクされていることがわかります。また、上から「px」を削除しようとしましたが、違いはないようです。


3
Jquery自体はうまく機能していますが、scrollToプラグインが正しくリンクされていますか?それらのアラートの1つをalert($。scrollTo);に変更します。
Andrew

回答:


97

それが機能しない場合は、jQueryのscrollTopメソッドを使用してみませんか?

$("#id").scrollTop($("#id").scrollTop() + 100);

スムーズにスクロールしたい場合は、基本的なjavascript setTimeout / setInterval関数を使用して、設定された時間にわたって1pxずつスクロールすることができます。


8
個々の要素ではなくページ全体をスクロールしたい場合は、Timがここで指摘したように$( 'html、body')を使用してください。$( 'body')だけではすべてのブラウザで機能するわけではありません。
i-- 2013年

321
$('html, body').animate({scrollTop: $("#page").offset().top}, 2000);

19
人々がscrollTopに「html」ではなく「html、body」を使用する理由をよく疑問に思いました。これについて何か考えはありますか?
スコットグリーンフィールド

+1は私のために働きました;)私はhtml, bodyhtmlの代わりになぜかを知りたいですか?
加藤

9
@ScottGreenfield、@Kato:ないように注意してくださいなぜ、このコメントは含めていないと言うbodyクローム4に休憩これを:stackoverflow.com/questions/1890995/...
雄二「富田」富田

scrollTop: 0また、正常に動作しています。しかし、期間は短くなります。速度が1000に設定されている場合は
正常

これは、完全なメソッドを追加するまでは良い解決策です-メソッドは2回実行されます。@complisticのソリューションはよりエレガントで、それを防ぎます。
plankguy

41

jQueryがアニメーション変数としてscrollTopをサポートするようになりました。

$("#id").animate({"scrollTop": $("#id").scrollTop() + 100});

スムーズにスクロールするために、setTimeout / setIntervalを実行する必要がなくなりました。


構文エラーが発生しました-終了{がありません。そうでなければ、これは良い点です。
ジョシュア

1
$("#id").offset().top代わりにすべきですか?
codeulike '10 / 10/05

15

htmlvsのbody問題を回避するために、CSSを直接​​アニメーション化するのではなくwindow.scrollTo();、各ステップを呼び出すことでこれを修正しました。

$({myScrollTop:window.pageYOffset}).animate({myScrollTop:300}, {
  duration: 600,
  easing: 'swing',
  step: function(val) {
    window.scrollTo(0, val);
  }
});

これは、クロスブラウザーJavaScriptを使用しているため、更新の手間をかけずにうまく機能します。

jQueryのanimate関数で実行できることの詳細については、http://james.padolsey.com/javascript/fun-with-jquerys-animate/を参照してください。


1
これは素晴らしいです。私は変更window.pageYOffset$(window).scrollTop()window.scrollTo(0, val)まで$(window).scrollTop(val)私は、ブラウザの互換性を心配する必要はありませんので。
leftclickben

1
そのようなjQueryのanimateメソッドにオブジェクトを渡すことは考えていませんでした。非常に多くの可能な用途。この解決策は素晴らしいです、ありがとう。
Synexis 2014

はい、技術は重要な貢献です。以前は「window.scrollTo()」を直接使用してブラウザの問題を回避していましたが、「完全な」コールバックやプロミスは許可されていません。この解決策について@complisticに感謝します。また、@ leftclickbenに感謝します。「.scrollTop()」を使用して彼のバリエーションを実装しました。また、リンクごとの "james.padolsey"記事は簡潔で、読む価値があります。
IAM_AL_X 2018年

「window.scrollTo()」はすべての最新のブラウザと互換性があるはずだと思います。
IAM_AL_X 2018年

7

構文が少し間違っているように見えます...私はあなたのコードに基づいて、800msで100pxを下にスクロールしようとしていると想定しています。

$.scrollTo('+=100px', 800, { axis:'y' });

6

実際には

function scrollTo(prop){
    $('html,body').animate({scrollTop: $("#"+prop).offset().top +
 parseInt($("#"+prop).css('padding-top'),10) },'slow');
}

うまく動作し、パディングをサポートします。マージンを簡単にサポートすることもできます-完了については以下を参照してください

function scrollTo(prop){
    $('html,body').animate({scrollTop: $("#"+prop).offset().top 
+ parseInt($("#"+prop).css('padding-top'),10) 
+ parseInt($("#"+prop).css('margin-top'),10) +},'slow');
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.