jQuery要素までスクロール


2326

私はこのinput要素を持っています:

<input type="text" class="textfield" value="" id="subject" name="subject">

次に、他のテキスト入力、テキストエリアなど、他のいくつかの要素があります。

ユーザーがでクリックするinput#subject、ページはページの最後の要素までスクロールし、素晴らしいアニメーションが表示されます。これは、上ではなく下にスクロールする必要があります。

ページの最後の項目は、次のsubmitボタン#submitです。

<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">

アニメーションは速すぎてはならず、滑らかでなければなりません。

最新のjQueryバージョンを実行しています。私はプラグインをインストールせず、デフォルトのjQuery機能を使用してこれを実現することを好みます。



scrollToChromeプラグインが原因で無効になりました。
Jacksonkr

回答:


4023

idのボタンがあると仮定して、次のbutton例を試してください:

$("#button").click(function() {
    $([document.documentElement, document.body]).animate({
        scrollTop: $("#elementtoScrollToID").offset().top
    }, 2000);
});

私は記事からコードを取得しましたjQueryプラグインなしで要素までスムーズにスクロールします。そして、私は以下の例でそれをテストしました。

<html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script>
        $(document).ready(function (){
            $("#click").click(function (){
                $('html, body').animate({
                    scrollTop: $("#div1").offset().top
                }, 2000);
            });
        });
    </script>
    <div id="div1" style="height: 1000px; width 100px">
        Test
    </div>
    <br/>
    <div id="div2" style="height: 1000px; width 100px">
        Test 2
    </div>
    <button id="click">Click me</button>
</html>


24
これはすべての場合で機能するわけではありません。参照してくださいstackoverflow.com/questions/2905867/...
ジャニスElmeris

7
@BarryChapman正確ではありません。グーグルでの後、私が見つけたこれを使用すると、ブラウザの種類ごとに余分なロジックを持ってしたくない場合は、両方のタグが必要とされているので、。
s3m3n 2013年

73
あなたがアニメーションを使用して、代わりの要素に瞬時にジャンプしたくない場合は、使用.scrollTop(…)の代わりに.animate({scrollTop: …}, …)
Rory O'Kane

11
ソリューション(これはうまく機能します)に加えて、ハッシュタグをURLに追加する完全な関数を追加できます。この場合、scrollToはすでに正しい位置にスクロールされているため、スクロールされません。ユーザーがURLをコピーすると、ページの適切な場所に自動的にスナップされます。
サンダー2014年

10
アニメーションの完了時にコールバックを使用して実行し、このソリューションでコールバックが2回起動することに気付いた場合は、「$( 'html、body')の代わりに「$( 'html body')。animate(...」を使用してみてください。 .animate(...」コンマは、2つのアニメーションイベントを作成したHTML用、ボディ用1あなたは本当にただのhtml体のおかげ@TJクラウダーのための1つ欲しい。。stackoverflow.com/questions/8790752/...
BoatCode

526

jQuery .scrollTo()メソッド

jQuery .scrollTo():表示-デモ、API、ソース

ページ/要素のスクロールをはるかに簡単にするために、この軽量プラグインを作成しました。ターゲット要素または指定された値を渡すことができる場所は柔軟です。おそらくこれは、jQueryの次の公式リリースの一部になる可能性があります。どう思いますか?


使用例:

$('body').scrollTo('#target'); // Scroll screen to target element

$('body').scrollTo(500); // Scroll screen 500 pixels down

$('#scrollable').scrollTo(100); // Scroll individual element 100 pixels down

オプション:

scrollTarget:目的のスクロール位置を示す要素、文字列、または数値。

offsetTop:スクロールターゲットの上の追加の間隔を定義する数値。

duration:アニメーションの実行時間を決定する文字列または数値。

easing:遷移に使用するイージング関数を示す文字列。

complete:アニメーションが完了したときに呼び出す関数。


2
chromeの最新のアップデートまで機能していました。私は現在、memoryboxweddings.com / photography-postsで使用しているバージョンを使用しています(試してみたい場合)。修正されたらアップデートを投稿します。
ティモシーペレス

修正された、それは実際にそれを殺していたjquery.comからのJSファイルだったことが判明。あなたがそれを試したら、今はうまくいくはずです。
ティモシーペレス

4
@TimothyPerez:それは、商業的使用を許容する何かを意味すると確信していますか?そのコードスニペットをウェブサイトの任意の場所で使用したいと考えている人はたくさんいるでしょう。多分MITライセンスのようなものがあなたのニーズに合うかもしれませんか?en.wikipedia.org/wiki/MIT_License
Robert Massaioli 2013年

13
$( 'body')はFFでは機能しなかったため、機能した$( 'html、body')を試しました。
kiranvj 2013

5
誰かがこのスクリプトソースを必要とする場合は、ここで取得できます。flesler.com/ jquery / scrollTo / js / jquery.scrollTo
Arturs

370

スムーズスクロール効果にあまり興味がなく、特定の要素にスクロールすることに興味がある場合は、これにjQuery関数は必要ありません。Javascriptはあなたのケースをカバーしています:

https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView

だからあなたがする必要があるのは: $("selector").get(0).scrollIntoView();

.get(0) これは、JQueryのDOM要素ではなく、JavaScriptのDOM要素を取得するためです。


12
あなたも使用できます$(selector)[0]か?
RobW 2014年

16
RobW、はい、[0]だけを使用できますが、get(0)は未定義または負のインデックスから保護します。ソースを参照してください: james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.fn.get
corbacho

21
jQueryをまったく使用しない場合は、を使用してくださいdocument.getElementById('#elementID').scrollIntoView()。要素を選択し、それを通常のJavaScriptに変換するためだけに、〜100kライブラリをロードする必要はありません。
Gavinが2014年

62
@ギャビン私はあなたがそうであることを意味したと確信しています:document.getElementById('elementID').scrollIntoView()
ブライアン

3
涼しい。ただし、使用する前に、ブラウザがこれをサポートしていることを確認してください。Mozillaによると、「これは実験的なテクノロジーです」
Tejasvi Hegde

48

この単純なスクリプトを使用する

if($(window.location.hash).length > 0){
        $('html, body').animate({ scrollTop: $(window.location.hash).offset().top}, 1000);
}

ハッシュタグがURLで見つかった場合、scrollToがIDにアニメーション化するようにソートされます。ハッシュタグが見つからない場合は、スクリプトを無視してください。


$(window.location.hash)jQueryの正規表現ID検出に適合しないハッシュでは機能しません。たとえば、数値を含むハッシュ。また、少し危険です。入力のフォーマットを検証して、別の要素を選択しないようにする必要があります。
dchacke

35

jQuery(document).ready(function($) {
  $('a[href^="#"]').bind('click.smoothscroll',function (e) {
    e.preventDefault();
    var target = this.hash,
        $target = $(target);

    $('html, body').stop().animate( {
      'scrollTop': $target.offset().top-40
    }, 900, 'swing', function () {
      window.location.hash = target;
    } );
  } );
} );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<ul role="tablist">
  <li class="active" id="p1"><a href="#pane1" role="tab">Section 1</a></li>
  <li id="p2"><a href="#pane2" role="tab">Section 2</a></li>
  <li id="p3"><a href="#pane3" role="tab">Section 3</a></li>
</ul>

<div id="pane1"></div>
<div id="pane2"></div>
<div id="pane3"></div>


1
それをより普遍的にし、ブラウザーのリンクウィンドウへの不要なハッシュタグの配置を削除するために、私は以下のようにコードを微調整しました:jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); });
bubencode

31

スティーブとピーターによる解決策は非常にうまく機能します。

ただし、場合によっては、値を整数に変換する必要があります。奇妙なことに、からの戻り値$("...").offset().topがにある場合がありfloatます。
使用する:parseInt($("....").offset().top)

例えば:

$("#button").click(function() {
    $('html, body').animate({
        scrollTop: parseInt($("#elementtoScrollToID").offset().top)
    }, 2000);
});

22

「アニメーション」ソリューションのコンパクトバージョン。

$.fn.scrollTo = function (speed) {
    if (typeof(speed) === 'undefined')
        speed = 1000;

    $('html, body').animate({
        scrollTop: parseInt($(this).offset().top)
    }, speed);
};

基本的な使い方: $('#your_element').scrollTo();


22

これが私のやり方です。

document.querySelector('scrollHere').scrollIntoView({ behavior: 'smooth' })

どのブラウザでも動作します。

関数に簡単にラップできます

function scrollTo(selector) {
    document.querySelector(selector).scrollIntoView({ behavior: 'smooth' })
}

これが実際の例です

$(".btn").click(function() {
  document.getElementById("scrollHere").scrollIntoView( {behavior: "smooth" })
})
.btn {margin-bottom: 500px;}
.middle {display: block; margin-bottom: 500px; color: red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button class="btn">Scroll down</button>

<h1 class="middle">You see?</h1>

<div id="scrollHere">Arrived at your destination</div>

文書


6
かなり短くて甘い。注意すべきことの1つ-これは、scrollTopの設定のようにビューポートの上部にスクロールするのではなく、ビューにスクロールするだけです(ビューポートの下部にある場合もあります)。
OG Sean

20

私はjQueryなしで方法を知っています:

document.getElementById("element-id").scrollIntoView();

編集:それは2年経ちましたが、私はまだこの投稿lmaoからランダムに評判を得ています


18

入力要素へのスクロールのみを処理する場合は、を使用できますfocus()。たとえば、最初に表示される入力までスクロールする場合は、次のようにします。

$(':input:visible').first().focus();

または、クラスのあるコンテナで最初に表示される入力.error

$('.error :input:visible').first().focus();

これを指摘してくれたTricia Ballに感謝します!


17

では、このソリューションは、どのプラグインを必要としないとありません必要な一切のセットアップお使いの決算前にスクリプトを置く以外にも</body>タグが。

$("a[href^='#']").on("click", function(e) {
  e.preventDefault();
  $("html, body").animate({
    scrollTop: $($(this).attr("href")).offset().top
  }, 1000);
});

if ($(window.location.hash).length > 1) {
  $("html, body").animate({
    scrollTop: $(window.location.hash).offset().top
  }, 1000);
}

ロード時に、アドレスにハッシュがある場合は、そのハッシュまでスクロールします。

またahrefハッシュなどのリンクをクリックすると、#topスクロールされます。


これはおそらくの> 1代わりになるはず0です。なぜなら/#、このスクリプトが壊れるからです
Tallboy

リンクの構成が不十分であるがTYでない限り、技術的に空のハッシュURLで終わるべきではありません。(私のコードのこのバージョンには、このパッチがすでに含まれていますが^^)
ジョナサン

このコードに関連するジッタがありますが、簡単に修正できます。return false;クリック時のイベントの最後に、デフォルトのアクション(アンカーにすぐにスクロールする)が発生しないようにする必要があります。
roncli 2016年

2
@roncli良い点-代わりにあなたはただ行うことができますe.preventDefault();
ジョナサン

e.preventDefault()ただし、クリックしてもURLのハッシュは更新されません。常にハッシュなしのURLです
jayasurya_j

8

ほとんどの場合、プラグインを使用するのが最善です。真剣に。私はここで私のものを売り込むつもりです。もちろん他にもあります。ただし、プラグインが最初に必要な落とし穴を本当に回避しているかどうかを確認してください。

他の場所でプラグインを使用する理由について書きました。一言で言えば、ここでほとんどの答えを支える1つのライナー

$('html, body').animate( { scrollTop: $target.offset().top }, duration );

悪いUXです。

  • アニメーションはユーザーの操作に応答しません。これは、ユーザーがクリック、タップ、またはスクロールしようとした場合でも続行されます。

  • アニメーションの開始点がターゲット要素に近い場合、アニメーションは非常に遅くなります。

  • ターゲット要素がページの下部に配置されている場合、ウィンドウの上部にスクロールできません。その後、スクロールアニメーションが途中で突然停止します。

これらの問題(およびその他の問題)を処理するには、私のプラグインであるjQuery.scrollableを使用できます。その後、呼び出しは

$( window ).scrollTo( targetPosition );

以上です。もちろん、さらに多くのオプションあります

目標位置に関して$target.offset().topは、ほとんどの場合仕事をします。ただし、戻り値ではhtml要素の境界が考慮されないことに注意してください(このデモを参照)。どのような状況でも目標位置を正確にする必要がある場合は、

targetPosition = $( window ).scrollTop() + $target[0].getBoundingClientRect().top;

html要素に境界線が設定されていても機能します。


8

アニメーション:

// slide to top of the page
$('.up').click(function () {
    $("html, body").animate({
        scrollTop: 0
    }, 600);
    return false;
});

// slide page to anchor
$('.menutop b').click(function(){
    //event.preventDefault();
    $('html, body').animate({
        scrollTop: $( $(this).attr('href') ).offset().top
    }, 600);
    return false;
});

// Scroll to class, div
$("#button").click(function() {
    $('html, body').animate({
        scrollTop: $("#target-element").offset().top
    }, 1000);
});

// div background animate
$(window).scroll(function () {

    var x = $(this).scrollTop();

    // freezze div background
    $('.banner0').css('background-position', '0px ' + x +'px');

    // from left to right
    $('.banner0').css('background-position', x+'px ' +'0px');

    // from right to left
    $('.banner0').css('background-position', -x+'px ' +'0px');

    // from bottom to top
    $('#skills').css('background-position', '0px ' + -x + 'px');

    // move background from top to bottom
    $('.skills1').css('background-position', '0% ' + parseInt(-x / 1) + 'px' + ', 0% ' + parseInt(-x / 1) + 'px, center top');

    // Show hide mtop menu  
    if ( x > 100 ) {
    $( ".menu" ).addClass( 'menushow' );
    $( ".menu" ).fadeIn("slow");
    $( ".menu" ).animate({opacity: 0.75}, 500);
    } else {
    $( ".menu" ).removeClass( 'menushow' );
    $( ".menu" ).animate({opacity: 1}, 500);
    }

});

// progres bar animation simple
$('.bar1').each(function(i) {
  var width = $(this).data('width');  
  $(this).animate({'width' : width + '%' }, 900, function(){
    // Animation complete
  });  
});

8

$('html, body')上記の回答の代わりに)オーバーフローコンテナー内でスクロールしたい場合は、絶対配置も使用して、これを行う方法です。

var elem = $('#myElement'),
    container = $('#myScrollableContainer'),
    pos = elem.position().top + container.scrollTop() - container.position().top;

container.animate({
  scrollTop: pos
}

7

div idをターゲットとするページのスクロールを実現する簡単な方法

var targetOffset = $('#divID').offset().top;
$('html, body').animate({scrollTop: targetOffset}, 1000);

6

これは、一般的なクラスセレクターを使用して、IDとhrefを抽象化する私のアプローチです

$(function() {
  // Generic selector to be used anywhere
  $(".js-scroll-to").click(function(e) {

    // Get the href dynamically
    var destination = $(this).attr('href');

    // Prevent href=“#” link from changing the URL hash (optional)
    e.preventDefault();

    // Animate scroll to destination
    $('html, body').animate({
      scrollTop: $(destination).offset().top
    }, 500);
  });
});
<!-- example of a fixed nav menu -->
<ul class="nav">
  <li>
    <a href="#section-1" class="nav-item js-scroll-to">Item 1</a>
  </li>
  <li>
    <a href="#section-2" class="nav-item js-scroll-to">Item 2</a>
  </li>
  <li>
    <a href="#section-3" class="nav-item js-scroll-to">Item 3</a>
  </li>
</ul>


6

非常にシンプルで使いやすいカスタムjQueryプラグイン。scroll=クリック可能な要素に属性を追加し、スクロールするセレクターにその値を設定するだけです。

のように:<a scroll="#product">Click me</a>。任意の要素で使用できます。

(function($){
    $.fn.animateScroll = function(){
        console.log($('[scroll]'));
        $('[scroll]').click(function(){
            selector = $($(this).attr('scroll'));
            console.log(selector);
            console.log(selector.offset().top);
            $('html body').animate(
                {scrollTop: (selector.offset().top)}, //- $(window).scrollTop()
                1000
            );
        });
    }
})(jQuery);

// RUN
jQuery(document).ready(function($) {
    $().animateScroll();
});

// IN HTML EXAMPLE
// RUN ONCLICK ON OBJECT WITH ATTRIBUTE SCROLL=".SELECTOR"
// <a scroll="#product">Click To Scroll</a>

4
var scrollTo = function($parent, $element) {
    var topDiff = $element.position().top - $parent.position().top;

    $parent.animate({
        scrollTop : topDiff
    }, 100);
};

4

$('html, body').animate(...) iphone、android chrome safariブラウザでは私には適していません。

ページのルートコンテンツ要素をターゲットにする必要がありました。

$( '#cotnent')。animate(...)

これが私が終わったものです

if (navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {           
    $('#content').animate({
    scrollTop: $("#elementtoScrollToID").offset().top
   }, 'slow');
}
else{
    $('html, body').animate({
    scrollTop: $("#elementtoScrollToID").offset().top
    }, 'slow');
}

#content divと関連付けられたすべてのボディコンテンツ

<html>
....
<body>
<div id="content">
....
</div>
</body>
</html>

ユーザーエージェントスニッフィングを実際に使用しないでください。webaim.org/blog/user-agent-string-history
Alex Podworny 2017

単語分割を追加:break-all; 問題のあるCSS要素に。Android / iOS webview jQuery.animate({scrollTop:y})の位置が正しくありません。medium.com/@ellery.leung/...
daliaessam

4

これは、https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoViewからのAtharvaの回答です。ドキュメントがiframe内にある場合に追加したいのは、親フレームの要素を選択してスクロールして表示する方法です。

 $('#element-in-parent-frame', window.parent.document).get(0).scrollIntoView();

3
$('html, body').animate({scrollTop: 
  Math.min( 
    $(to).offset().top-margintop, //margintop is the margin above the target
    $('body')[0].scrollHeight-$('body').height()) //if the target is at the bottom
}, 2000);

3

ユーザーが#subjectを使用してその入力をクリックすると、ページはページの最後の要素までアニメーションで表示されます。それは上へではなく下へのスクロールであるべきです。

ページの最後の項目は、#submitを含む送信ボタンです

$('#subject').click(function()
{
    $('#submit').focus();
    $('#subject').focus();
});

これは最初に下にスクロールします #submit、クリックされた入力にカーソルを戻します。これは、スクロールダウンを模倣しており、ほとんどのブラウザーで機能します。純粋なJavaScriptで記述できるため、jQueryも必要ありません。

呼び出しfocusを連鎖させることで、このような関数の使用法がアニメーションをよりよく模倣できるかfocus。私はこの理論をテストしていませんが、次のようになります。

<style>
  #F > *
  {
    width: 100%;
  }
</style>

<form id="F" >
  <div id="child_1"> .. </div>
  <div id="child_2"> .. </div>
  ..
  <div id="child_K"> .. </div>
</form>

<script>
  $('#child_N').click(function()
  {
    $('#child_N').focus();
    $('#child_N+1').focus();
    ..
    $('#child_K').focus();

    $('#child_N').focus();
  });
</script>

3

私はモジュールscroll-element を設定しましたnpm install scroll-element。それはこのように動作します:

import { scrollToElement, scrollWindowToElement } from 'scroll-element'

/* scroll the window to your target element, duration and offset optional */
let targetElement = document.getElementById('my-item')
scrollWindowToElement(targetElement)

/* scroll the overflow container element to your target element, duration and offset optional */
let containerElement = document.getElementById('my-container')
let targetElement = document.getElementById('my-item')
scrollToElement(containerElement, targetElement)

以下のSO投稿の助けを借りて書かれました:

これがコードです:

export const scrollToElement = function(containerElement, targetElement, duration, offset) {
  if (duration == null) { duration = 1000 }
  if (offset == null) { offset = 0 }

  let targetOffsetTop = getElementOffset(targetElement).top
  let containerOffsetTop = getElementOffset(containerElement).top
  let scrollTarget = targetOffsetTop + ( containerElement.scrollTop - containerOffsetTop)
  scrollTarget += offset
  scroll(containerElement, scrollTarget, duration)
}

export const scrollWindowToElement = function(targetElement, duration, offset) {
  if (duration == null) { duration = 1000 }
  if (offset == null) { offset = 0 }

  let scrollTarget = getElementOffset(targetElement).top
  scrollTarget += offset
  scrollWindow(scrollTarget, duration)
}

function scroll(containerElement, scrollTarget, duration) {
  let scrollStep = scrollTarget / (duration / 15)
  let interval = setInterval(() => {
    if ( containerElement.scrollTop < scrollTarget ) {
      containerElement.scrollTop += scrollStep
    } else {
      clearInterval(interval)
    }
  },15)
}

function scrollWindow(scrollTarget, duration) {
  let scrollStep = scrollTarget / (duration / 15)
  let interval = setInterval(() => {
    if ( window.scrollY < scrollTarget ) {
      window.scrollBy( 0, scrollStep )
    } else {
      clearInterval(interval)
    }
  },15)
}

function getElementOffset(element) {
  let de = document.documentElement
  let box = element.getBoundingClientRect()
  let top = box.top + window.pageYOffset - de.clientTop
  let left = box.left + window.pageXOffset - de.clientLeft
  return { top: top, left: left }
}

2

要素全体を表示するには(現在のウィンドウサイズで可能な場合):

var element       = $("#some_element");
var elementHeight = element.height();
var windowHeight  = $(window).height();

var offset = Math.min(elementHeight, windowHeight) + element.offset().top;
$('html, body').animate({ scrollTop: offset }, 500);

2

私は、jQueryオブジェクト、CSSセレクター、または数値のいずれかにスクロールする汎用関数を作成しました。

使用例:

// scroll to "#target-element":
$.scrollTo("#target-element");

// scroll to 80 pixels above first element with class ".invalid":
$.scrollTo(".invalid", -80);

// scroll a container with id "#my-container" to 300 pixels from its top:
$.scrollTo(300, 0, "slow", "#my-container");

関数のコード:

/**
* Scrolls the container to the target position minus the offset
*
* @param target    - the destination to scroll to, can be a jQuery object
*                    jQuery selector, or numeric position
* @param offset    - the offset in pixels from the target position, e.g.
*                    pass -80 to scroll to 80 pixels above the target
* @param speed     - the scroll speed in milliseconds, or one of the
*                    strings "fast" or "slow". default: 500
* @param container - a jQuery object or selector for the container to
*                    be scrolled. default: "html, body"
*/
jQuery.scrollTo = function (target, offset, speed, container) {

    if (isNaN(target)) {

        if (!(target instanceof jQuery))
            target = $(target);

        target = parseInt(target.offset().top);
    }

    container = container || "html, body";
    if (!(container instanceof jQuery))
        container = $(container);

    speed = speed || 500;
    offset = offset || 0;

    container.animate({
        scrollTop: target + offset
    }, speed);
};

2

価値があるのは、これが、スクロールを使用してDIV内に配置できる一般的な要素に対してこのような動作を実現する方法です。この例では、本文全体をスクロールするのではなく、特定の要素だけをオーバーフローでスクロールします。より大きなレイアウト内。

ターゲット要素の高さの偽の入力を作成し、それにフォーカスを置きます。スクロール可能な階層内の深さに関係なく、ブラウザーが残りの部分を処理します。魅力のように機能します。

var $scrollTo = $('#someId'),
inputElem = $('<input type="text"></input>');

$scrollTo.prepend(inputElem);
inputElem.css({
  position: 'absolute',
  width: '1px',
  height: $scrollTo.height()
});
inputElem.focus();
inputElem.remove();

2

これは私のために働きました:

var targetOffset = $('#elementToScrollTo').offset().top;
$('#DivParent').animate({scrollTop: targetOffset}, 2500);

2

jQuery(document).ready(function($) {
  $('a[href^="#"]').bind('click.smoothscroll',function (e) {
    e.preventDefault();
    var target = this.hash,
        $target = $(target);

    $('html, body').stop().animate( {
      'scrollTop': $target.offset().top-40
    }, 900, 'swing', function () {
      window.location.hash = target;
    } );
  } );
} );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<ul role="tablist">
  <li class="active" id="p1"><a href="#pane1" role="tab">Section 1</a></li>
  <li id="p2"><a href="#pane2" role="tab">Section 2</a></li>
  <li id="p3"><a href="#pane3" role="tab">Section 3</a></li>
</ul>

<div id="pane1"></div>
<div id="pane2"></div>
<div id="pane3"></div>


2

一発ギャグ

subject.onclick = e=> window.scroll({ top: submit.offsetTop, behavior: 'smooth'});


1
それは完全に動作します!
jjoselon

1

2019年の更新された回答:

$('body').animate({
    scrollTop: $('#subject').offset().top - $('body').offset().top + $('body').scrollTop()
}, 'fast');

このセレクターはbodyに必要です。$( '#subject')。offset()。topで十分です。
ali6p
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.