jQuery를 사용하여 특정 항목으로 스크롤하는 방법은 무엇입니까?


252

세로 스크롤 막대가있는 큰 테이블이 있습니다. jQuery / Javascript를 사용하여이 테이블의 특정 줄로 스크롤하고 싶습니다.

이 작업을 수행하는 기본 제공 방법이 있습니까?

여기에 약간의 예가 있습니다.

div {
    width: 100px;
    height: 70px;
    border: 1px solid blue;
    overflow: auto;
}
<div>
    <table id="my_table">
        <tr id='row_1'><td>1</td></tr>
        <tr id='row_2'><td>2</td></tr>
        <tr id='row_3'><td>3</td></tr>
        <tr id='row_4'><td>4</td></tr>
        <tr id='row_5'><td>5</td></tr>
        <tr id='row_6'><td>6</td></tr>
        <tr id='row_7'><td>7</td></tr>
        <tr id='row_8'><td>8</td></tr>
        <tr id='row_9'><td>9</td></tr>
    </table>
</div>

답변:


562

간단하다. 플러그인이 필요하지 않습니다 .

var $container = $('div'),
    $scrollTo = $('#row_8');

$container.scrollTop(
    $scrollTo.offset().top - $container.offset().top + $container.scrollTop()
);

// Or you can animate the scrolling:
$container.animate({
    scrollTop: $scrollTo.offset().top - $container.offset().top + $container.scrollTop()
});​

다음은 실제 예 입니다.

에 대한 설명서scrollTop .


4
컨테이너가 스크롤이있는 경우, 당신은 scrollTop에 대한 계정이 필요합니다 : scrollTo.offset ()를 최고 - container.offset ()를 상단 + container.scrollTop ()..
claviska

1
$ (document) .scrollTop (value)를 사용하여 전체 창을 스크롤 할 수 있습니다. 기본 jquery 코드는 브라우저 문제를 해결합니다.
Chris Moschini 2016 년

7
scrollTo상단이 아닌 중앙에 배치 하려는 경우 :scrollTo.offset().top - container.offset().top + container.scrollTop() - (container.height()/2)
Mahn

7
element.scrollIntoView()-그게 전부입니다. 애니메이션이 표준화되었습니다. 참조 developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
WickyNilliams

7
코드 블록의 맨 끝에 "보이지 않는"문자가 있습니다. Chrome에서 Edge에서 문자가 유효하지 않은 것으로 간주됩니다. -복사
-paster

114

컨테이너의 스크롤에 응답하지 않지만 사람들은 유용하다고 생각합니다.

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

문서 스크롤러 중 하나에있을 수 있고 어떤 것을 결정하기가 어렵 기 때문에 html과 body를 모두 선택합니다. 최신 브라우저의 경우 $(document.body).

또는 페이지 상단으로 이동하려면

$('html,body').animate({scrollTop: 0});

또는 애니메이션없이 :

$(window).scrollTop(some_element.offset().top);

또는...

window.scrollTo(0, some_element.offset().top); // native equivalent (x, y)

안녕하세요 @infensus 당신이 나 에게이 원인이 작동하지 않는 원인의 실제 예를 줄 수 있습니까? 나는 var section2 = $ ( '# section-2'); $ ( 'html, body'). animate ({scrollTop : section2.offset (). top});
dll_onFire

괜찮아 보입니다-section2가 존재합니까? console.log (section2.length); 0이 아닌지 확인하십시오. 조금 예를 들어 보겠습니다.
Dominic

$('html,body')? 그는 특정 용기에만 필요합니다. 받아 들인 대답이 나에게 더 좋습니다. 나는 묻는 질문과 비슷한 경우가 있으며 귀하의 답변이 효과가 없었습니다.
Petroff

2
내가 이것을 썼을 때 @Petroff는 이상하게도 요소가 스크롤 컨테이너에 있음을 알지 못했습니다. 사람들이 질문 제목으로 인해 본문을 스크롤하기 위해 Google 검색에서 여기로 왔기 때문에 답변을 그대로 두겠습니다.
Dominic

30

나는 플러그인을 사용하는 Kevin과 다른 사람들에게 동의합니다.

window.scrollTo(0, $("#element").offset().top);

완전히 단순해야 할 무언가를 위해 나는 온라인으로 다른 솔루션에 오랜 시간을 보냈지만이 간단한 라이너는 내가 필요한 것을 정확하게 수행합니다.
Laurence Cope

3
이 방법은 전체 창에서 작동합니다. overflow : scroll이있는 내용을 스크롤하려면 작동하지 않습니다.
Jeremy

12

나는 그것을 스스로 관리했다. 플러그인이 필요 없습니다. 내 요점을 확인하십시오 .

// Replace #fromA with your button/control and #toB with the target to which     
// You wanna scroll to. 
//
$("#fromA").click(function() {
    $("html, body").animate({ scrollTop: $("#toB").offset().top }, 1500);
});

애니메이션으로 완성 된 한 줄짜리 요점은 정확히 내가 필요한 것입니다. 감사!
Scott Smith

No need for any plugins?? 그러나 당신은 jQuery를 사용합니다! 플러그인이 아니라 거대한 라이브러리입니다.
그린

1
jquery 라이브러리 참조 외에도 참조를 추가 할 필요가 없습니다. 또한 jquery는 일종의 산업 표준입니다. 왜 사용하지 않습니까? 아마도 jquery 없이는 가능하지만 구문 분석 부분을 위해 많은 코드를 작성해야합니다. 비생산적인 느낌입니다. 그리고 measy div로 스크롤하기 위해 플러그인에 전체를 작성하는 것은 비생산적이었습니다.
lorddarq

4

scrollIntoView()자바 스크립트에서 메소드를 사용할 수 있습니다 . 그냥 줘id.scrollIntoView();

예를 들어

row_5.scrollIntoView();

애니메이션하는 방법?
그린

애니메이션 할 필요가 없습니다. scrollIntoView ()를 사용하면 컨트롤이 자동으로 스크롤되어 뷰에 표시됩니다.
Tamilarasi 2016 년


2

컨테이너 중심으로 요소 스크롤

컨테이너 중앙에 요소를 가져옵니다.

코덱에 대한 데모

JS

function scrollToCenter() {
  var container = $('.container'),
    scrollTo = $('.5');

  container.animate({
    //scrolls to center
    scrollTop: scrollTo.offset().top - container.offset().top + scrollTo.scrollTop() - container.height() / 2
  });
}

HTML

<div class="container">
   <div class="1">
    1
  </div>
  <div class="2">
    2
  </div>
  <div class="3">
    3
  </div>
  <div class="4">
    4
  </div>
  <div class="5">
    5
  </div>
  <div class="6">
    6
  </div>
  <div class="7">
    7
  </div>
  <div class="8">
    8
  </div>
  <div class="9">
    9
  </div>
  <div class="10">
    10
  </div>


</div>
<br>
<br>
<button id="scroll" onclick="scrollToCenter()">
  Scroll
</button>

CSS

.container {
  height: 60px;
  overflow-y: scroll;
  width 60px;
  background-color: white;
}

중심에는 정확하지 않지만 더 큰 요소에서는 인식 할 수 없습니다.


2

jQueryJavaScript로 스크롤 할 수 있습니다. jQuery와이 JavaScript 코드가 필요합니다.

$(function() {
  // Generic selector to be used anywhere
  $(".js-scroll-to-id").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
    }, 1500);
  });
});


1

다른 사람들이 게시 한 내용을 조합하여 사용했습니다. 간단하고 부드럽게

 $('#myButton').click(function(){
        $('html, body').animate({
            scrollTop: $('#scroll-to-this-element').position().top },
            1000
        );
    });

@ AnriëtteMyburgh im position ()이 모든 브라우저에서 작동하는지 확실하지 않습니다. 다른 곳에서 시도해 보았습니까? 아니면 사용중인 코드를보고 다른 것이 있는지 확인할 수 있습니까?
Nlinscott

1

내장 자바 스크립트 scrollTo함수 가 있기 때문에 아무도 분명하지 않은 이유를 모르겠습니다 .

scrollTo( $('#element').position().top );

참조 .


6
scrollTo에는 두 개의 인수가 필요하며 하나만 작성했습니다.
NuclearPeon

2
... 창 개체에서 호출됩니다.
hashchange

1

여기에 대부분의 사람들이 제안하는 것과는 반대로, 나는 당신이 권 해드립니다 당신이 움직임을 애니메이션을 적용 할 경우 플러그인을 사용합니다. scrollTop에 애니메이션을 적용하는 것만으로는 원활한 사용자 경험을 제공 할 수 없습니다. 추론에 대한 내 대답은 여기 를 참조하십시오 .

나는 수년 동안 많은 플러그인을 시도했지만 결국 직접 플러그인을 작성했습니다. jQuery.scrollable 스핀을 원할 수도 있습니다 . 이를 사용하면 스크롤 동작이

$container.scrollTo( targetPosition );

그러나 이것이 전부는 아닙니다. 목표 위치도 수정해야합니다. 다른 답변에서 볼 수있는 계산

$target.offset().top - $container.offset().top + $container.scrollTop()

대부분 작동하지만 완전히 정확하지는 않습니다. 스크롤 컨테이너의 테두리를 제대로 처리하지 못합니다. 대상 요소가 테두리 크기만큼 너무 위로 스크롤됩니다. 여기 데모가 있습니다.

따라서 목표 위치를 계산하는 더 좋은 방법은

var target = $target[0], 
    container = $container[0];

targetPosition = $container.scrollTop() + target.getBoundingClientRect().top - container.getBoundingClientRect().top - container.clientTop;

다시 데모를보십시오 를 살펴보고 실제로 작동하는지 확인하십시오.

대상 위치를 반환하고 창 및 비 창문 스크롤 컨테이너 모두에서 작동하는 함수의 경우이 요점을 자유롭게 사용 하십시오. . 여기에있는 의견은 위치 계산 방법을 설명합니다.

처음에는 애니메이션 스크롤을 위해 플러그인을 사용하는 것이 가장 좋겠다고 말했습니다 . 그러나 전환없이 대상으로 이동하려면 플러그인이 필요하지 않습니다. @James답변을 참조하십시오. 그러나 컨테이너 주위에 테두리가 있으면 대상 위치를 올바르게 계산하십시오.


0

가치가있는 것은 이것이 스크롤을 사용하여 컨테이너를 알 수없는 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();

0

나는이 조합을했다. 나를 위해 그 일. 그러나 클릭 이동이 div 크기가 너무 커서 scenerio 스크롤 이이 특정 div로 내려 가지 않으면 한 가지 문제가 발생합니다.

 var scrollDownTo =$("#show_question_" + nQueId).position().top;
        console.log(scrollDownTo);
        $('#slider_light_box_container').animate({
            scrollTop: scrollDownTo
            }, 1000, function(){
        });

        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.