Cuộn trở lại đầu div có thể cuộn


121
<div id="containerDiv"></div>
#containerDiv {
  position: absolute;
  top: 0px;
  width: 400px;
  height: 100%;
  padding: 5px;
  font-size: .875em;
  overflow-y: scroll;
}
document.getElementById("containerDiv").innerHTML = variableLongText;

Làm thế nào để đặt lại vị trí cuộn trở lại đầu div container vào lần tiếp theo?

Câu trả lời:


206
var myDiv = document.getElementById('containerDiv');
myDiv.innerHTML = variableLongText;
myDiv.scrollTop = 0;

Xem scrollTopthuộc tính.


Đã thử nhưng nó không hoạt động. Khi một VariableLongtext được tải trong div container và đang nhìn vào giữa nó, sau đó vuốt sang variableLongtext mới, nó sẽ hiển thị trong vùng chứa, nhưng chúng ta sẽ không nhìn vào đầu của nó, nó sẽ được cuộn xuống một chút.
imhere

2
@ s12345 Bạn nên tạo một trường hợp thử nghiệm có thể tái tạo cho chúng tôi thấy sự cố của bạn (ví dụ: trên jsfiddle.net ) và cho biết bạn đang gặp phải vấn đề này trên hệ điều hành / trình duyệt / phiên bản nào.
Phrogz

2
Xin lỗi sai lầm của tôi .. nó hoạt động! Đã nhầm lẫn với hai div tương tự.
imhere

63

Một cách khác để làm điều đó với hoạt ảnh mượt mà như thế này

$("#containerDiv").animate({ scrollTop: 0 }, "fast");

7
Hoạt động tốt, nhưng xin đừng sử dụng slow, nó rất ... chậm!
Pascal

1
Thay vì truyền slownhư đối số thứ hai. Bạn có thể chuyển vào một số nguyên sẽ là số mili giây để hoạt ảnh hoàn thành.
Sushant Gupta

2
Thay đổi nó để nhanh :)
Mahmoud Ibrahim

1
Câu trả lời tốt nhất! Cảm ơn!
YogaPanda

1
Điều này hoạt động tốt nếu bạn đang sử dụng jquery. Nếu bạn đang sử dụng kiểu chữ góc (javascript thuần), điều này sẽ không hoạt động. làm thế nào bạn có thể đạt được điều này với javascript đơn giản.
Babulaas

27

Tôi đã thử các câu trả lời hiện có cho câu hỏi này và không câu trả lời nào hoạt động trên Chrome cho tôi. Những gì đã làm việc hơi khác một chút:

$('body, html, #containerDiv').scrollTop(0);

16

scrollTo

window.scrollTo(0, 0);

là giải pháp cuối cùng để cuộn cửa sổ lên trên cùng - phần tốt nhất là nó không yêu cầu bất kỳ bộ chọn id nào và ngay cả khi chúng ta sử dụng cấu trúc IFRAME, nó sẽ hoạt động cực kỳ tốt.

Phương thức scrollTo () cuộn tài liệu đến các tọa độ được chỉ định.
window.scrollTo (xpos, ypos);
Số xpos Yêu cầu. Tọa độ để cuộn tới, dọc theo trục x (ngang), tính bằng pixel
Ypos Number Bắt buộc. Tọa độ để cuộn tới, dọc theo trục y (dọc), tính bằng pixel

jQuery

Một tùy chọn khác để làm điều tương tự là sử dụng jQuery và nó sẽ mang lại giao diện mượt mà hơn cho cùng một

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

trong đó 0 sau scrollTop chỉ định vị trí thanh cuộn dọc trong pixel và tham số thứ hai là tham số tùy chọn hiển thị thời gian tính bằng micro giây để hoàn thành tác vụ.


1
điều gì sẽ xảy ra nếu chúng ta chỉ muốn cuộn một div nội bộ lên trên cùng? Điều này cuối cùng sẽ không hoạt động.
John Lord

1
Các phần tử cũng có phương thức document.getElementById('scroller').scrollTo(0,0)
.scrollTo

15

Điều này đã làm việc cho tôi:

document.getElementById('yourDivID').scrollIntoView();

Đây là giải pháp ưa thích của tôi. Để chuyển đổi suôn sẻ, hãy thêm điều này:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
Chris

Ngoài ra, hãy lưu ý rằng scollIntoViewchỉ hoạt động nếu bạn gọi nó trên phần tử sẽ được cuộn. Nói cách khác, không gọi nó trên phần tử bạn muốn cuộn đến , hãy gọi nó trên phần tử bạn muốn cuộn.
Chris

9

Đối với những người vẫn không thể thực hiện việc này, hãy đảm bảo rằng phần tử bị tràn được hiển thị trước khi sử dụng hàm jQuery .

Thực hiện:

$('#elem').show();
$('#elem').scrollTop(0);

1
Tiết kiệm cuộc sống! Đã bắt đầu mất ý chí sống với scrollTop không hoạt động! phải đặt cuộc gọi scrollTop của tôi trong một hàm setTimeout.
AVFC_Bubble88

Tôi cảm thấy như vậy! Tôi đang làm việc trong một hộp thoại phương thức bootstrap. Tôi đã phải thiết lập một sự kiện cho phương thức không đặt lại thanh cuộn cho đến khi phương thức ngừng hoạt ảnh. Đây là mã tôi đã sử dụng: $ ('# add_modal'). On ('show.bs.modal', function (e) {$ ('div.border'). ScrollTop (0);});
Irv Lennert

2

Đối với tôi, cách scrollTop không hoạt động, nhưng tôi thấy cách khác:

element.style.display = 'none';
setTimeout(function() { element.style.display = 'block' }, 100);

Tuy nhiên, đã không kiểm tra thời gian tối thiểu để hiển thị css đáng tin cậy, 100ms có thể là quá mức cần thiết.


2

Nếu bạn muốn cuộn với một quá trình chuyển đổi mượt mà, bạn có thể sử dụng điều này!

(Vanilla JS)

const tabScroll = document.getElementById("tabScroll");
window.scrollTo({
  'behavior': 'smooth',
  'left': 0,
  'top': tabScroll.offsetTop - 80
});

Nếu người dùng mục tiêu của bạn là ChromeFirefox , thì điều này là tốt! Nhưng tiếc là phương pháp này không được hỗ trợ đủ tốt trên tất cả các trình duyệt. Kiểm tra tại đây

Hi vọng điêu nay co ich!!


2

Theo câu trả lời của François Noël "Đối với những người vẫn không thể thực hiện điều này, hãy đảm bảo rằng phần tử bị tràn được hiển thị trước khi sử dụng hàm jQuery."

Tôi đã làm việc trong một phương thức bootstrap mà tôi liên tục đưa ra các quyền tài khoản trong một div tràn trên thứ nguyên y. Vấn đề của tôi là, tôi đang cố gắng sử dụng hàm jquery .scrollTop (0) và nó sẽ không hoạt động cho dù tôi đã cố gắng thực hiện như thế nào. Tôi đã phải thiết lập một sự kiện cho phương thức không đặt lại thanh cuộn cho đến khi phương thức ngừng hoạt ảnh. Mã cuối cùng đã làm việc cho tôi là ở đây:

    $('#add-modal').on('shown.bs.modal', function (e) {
        $('div.border').scrollTop(0);
    });

1

Nếu nội dung html làm tràn một khung nhìn duy nhất, điều này làm việc với tôi khi chỉ sử dụng javascript:

document.getElementsByTagName('body')[0].scrollTop = 0;

Trân trọng,


1

Đây là cách duy nhất nó hoạt động với tôi, với quá trình chuyển đổi cuộn mượt mà:

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

1

Khi nhận phần tử theo tên lớp, đừng quên giá trị trả về là một mảng; Do đó mã này:

document.getElementByClassName("dropdown-menu").scrollTop = 0

Sẽ không làm việc. Sử dụng mã bên dưới để thay thế.

document.getElementByClassName("dropdown-menu")[0].scrollTop = 0

Tôi nghĩ rằng những người khác cũng có thể gặp phải vấn đề tương tự như tôi; vì vậy điều này sẽ thực hiện thủ thuật.


0

hai mã này hoạt động đối với tôi giống như một sự quyến rũ mà đầu tiên, mã này sẽ dùng để cuộn lên đầu trang nhưng nếu bạn muốn cuộn đến một số div cụ thể, hãy sử dụng mã thứ hai với id div của bạn.

$('body, html, #containerDiv').scrollTop(0);
document.getElementById('yourDivID').scrollIntoView();

Nếu bạn muốn cuộn đến theo tên lớp, hãy sử dụng mã bên dưới

var $container = $("html,body");
var $scrollTo = $('.main-content');

$container.animate({scrollTop: $scrollTo.offset().top - $container.offset().top + $container.scrollTop(), scrollLeft: 0},300);

0

ID Nên có id của div tương ứng có thuộc tính css tràn.

document.querySelector('#YOUR_OVERFLOWED_DIV').scrollTop = 0;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.