2012-07-02 37 views
17

Tôi có một danh sách các phần tử nằm trong một div ẩn bị tràn. Vì vậy, không phải tất cả các phần tử đều hiển thị. Bây giờ, nếu một phần tử được kích hoạt, nó sẽ trở nên hiển thị trong div.Làm cách nào để cuộn trong một div ẩn bị tràn vào một phần tử hiện đang ẩn nào đó?

Làm cách nào để cuộn đến phần tử đang hoạt động bằng jQuery?

Đó chỉ là sự tiện lợi mà phần tử cuối cùng có lớp đang hoạt động. Nó sẽ được chuyển động tự động.

var scrollToEl = $("div.element.active"); 
 
console.log(zoomToEl);
#main, 
 
#sidebar { 
 
    height: 200px; 
 
} 
 
#wrapper { 
 
    width: 190px; 
 
    float: left; 
 
    background: grey; 
 
    overflow: auto; 
 
    overflow-x: hidden; 
 
} 
 
#sidebar div.element { 
 
    height: 150px; 
 
    width: 150px; 
 
    background-color: green; 
 
    margin-bottom: 10px; 
 
} 
 
#sidebar div.element.active { 
 
    background-color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="main"> 
 
    <div id="wrapper" class="sidebar"> 
 
    <div id="sidebar"> 
 
     <div class="element" data-slide-id="0">a 
 
     </div> 
 
     <div class="element" data-slide-id="1">b 
 
     </div> 
 
     <div class="element" data-slide-id="2">c 
 
     </div> 
 
     <div class="element" data-slide-id="3">d 
 
     </div> 
 
     <div class="element" data-slide-id="4">e 
 
     </div> 
 
     <div class="element" data-slide-id="5">f 
 
     </div> 
 
     <div class="element" data-slide-id="6">g 
 
     </div> 
 
     <div class="element active" data-slide-id="7">h 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

Các yếu tố đó nên trở thành có thể nhìn thấy:

var scrollToEl = $("div.element.active"); 

Trả lời

23

Bạn có thể đặt scrollTop của div wrapper là top của position của yếu tố tích cực.

$("#wrapper").scrollTop($("#wrapper").scrollTop() + $("div.element.active").position().top); 

DEMO

+3

Đã thử demo của bạn nhưng nó chỉ hoạt động một lần, thử lặp lại nó và bạn sẽ thấy một số hành vi lạ. Điều này dường như được sửa bằng mã sau: $ ("# wrapper"). ScrollTop ($ ("# wrapper"). ScrollTop() + $ ("div.element.active"). Position(). Top); DEMO: http://jsfiddle.net/pA2Qh/ – Rob

+0

Bắt tốt, @Rob! Điều đó xảy ra bởi vì khi nó cuộn đến div đang hoạt động, đó là 'position.top' trở thành 0. Lần sau bạn thử chạy mã đó, nó sẽ di chuyển đến vị trí 0, đầu thực tế của vùng chứa. Đã cập nhật mã của tôi. – sachleen

+0

@Rob, điều này thật tuyệt. Đây là giải pháp tốt nhất cho các trường hợp có 'cha mẹ: 100% chiều cao' và/hoặc' overflow: hidden' - giống như mọi khi, trong trường hợp thiết bị di động – KingJulian

16

Có lẽ bạn đang tìm kiếm scrollIntoView phương pháp.

scrollToEl[0].scrollIntoView(); 

DEMO:http://jsfiddle.net/yuFk5/14/

+0

Nó dường như có một vài nhược điểm: http://stackoverflow.com/a/9446004/457268 Esp. "chỉ đơn giản là nhảy đến một yếu tố cụ thể mà có thể cũng ở cuối trang" là một bộ ngắt giao dịch cho tôi. – k0pernikus

+0

@ k0pernikus Bạn nên chú thích hơn trong câu hỏi mà bạn đang tìm kiếm giải pháp hoạt hình. Nếu không, phương thức hoạt động hoàn toàn tốt và đơn giản, IMO. – VisioN

+0

Tôi có nghĩa là không tôn trọng giải pháp bạn cung cấp. Nó chỉ không phù hợp với nhu cầu của tôi :) – k0pernikus

Các vấn đề liên quan