滚动回到可滚动div的顶部


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;

下次如何将滚动位置重置回容器div的顶部?

Answers:


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

请参阅scrollTop属性。


尝试过,但是没有用。当将variableLongtext加载到容器div中并查看它的中间位置时,然后轻扫到新的variableLongtext,它将显示在容器中,但是我们不会在它的顶部查看,它已经被滚动了下来一点。
2012年

2
@ s12345您最好制作一个可重复的测试用例,向我们展示您的问题(例如,在jsfiddle.net上),并说说您正在使用哪种OS /浏览器/版本。
Phrogz 2012年

2
对不起,我的错..奏效!与两个类似的div混淆了。
此处

63

制作平滑动画的另一种方法是这样的

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

7
效果很好,但是不要使用slow,太慢了!
Pascal 2014年

1
而不是slow作为第二个参数传递。您可以传入一个整数,该整数将是动画完成的毫秒数。
Sushant Gupta 2014年

2
将其更改为快速:)
Mahmoud Ibrahim

1
最佳答案!谢谢!
YogaPanda

1
如果您使用的是jquery,则效果很好。如果您使用的是角型打字稿(纯JavaScript),则将无法使用。如何用普通的javascript实现这一目标。
Babulaas

27

我尝试了该问题的现有答案,但没有一个对我有效。所做的工作略有不同:

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

16

scrollTo

window.scrollTo(0, 0);

是将窗口滚动到顶部的最终解决方案-最好的部分是它不需要任何id选择器,即使我们使用IFRAME结构,它也可以很好地工作。

scrollTo()方法将文档滚动到指定的坐标。
window.scrollTo(xpos,ypos);
xpos编号必需。沿x轴(水平)滚动到的坐标,以像素为单位
ypos Number必需。沿y轴(垂直)滚动到的坐标(以像素为单位)

jQuery的

做到这一点的另一个选择是使用jQuery,它将为相同的对象提供更平滑的外观

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

其中scrollTop之后的0指定像素中垂直滚动条的位置,第二个参数是可选参数,以毫秒为单位显示完成任务的时间。


1
如果我们只想将内部div滚动到顶部怎么办?这最终将不起作用。
约翰·罗德,

1
元素也具有.scrollTo方法,您可以执行document.getElementById('scroller').scrollTo(0,0)
Mojimi

15

这为我工作:

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

这是我的首选解决方案。为了平稳过渡,请添加以下内容:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
克里斯·

另外,请注意,scollIntoView仅当您在要滚动的元素上调用它时才起作用。换句话说,不要在要滚动的元素上调用它,而在要滚动的元素上调用它。
克里斯

9

对于仍然无法执行此操作的用户,请确保在使用jQuery函数之前显示了溢出的元素

范例:

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

1
救生员!开始失去与scrollTop共同生活的意愿!必须将我的scrollTop调用放在setTimeout函数中。
AVFC_Bubble88 '17

我也是这么感觉的!我在引导模态对话框中工作。我必须为模态设置一个事件,直到模态停止动画后才重置滚动条。这是我使用的代码:$('#add_modal')。on('shown.bs.modal',function(e){$('div.border')。scrollTop(0);});
Irv Lennert '18

2

对我来说,scrollTop方法不起作用,但是我发现了其他方法:

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

虽然没有检查最小时间以进行可靠的CSS渲染,但是100ms可能会过大。


2

如果要平滑过渡滚动,可以使用此功能!

(香草JS)

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

如果您的目标用户是ChromeFirefox,那就太好了!但是不幸的是,这种方法在所有浏览器中都没有得到很好的支持。 在这里检查

希望这可以帮助!!


2

按照FrançoisNoël的回答:“对于仍然无法完成这项工作的用户,请确保在使用jQuery函数之前显示溢出的元素。”

我一直在使用引导模式,在y维度上溢出的div中反复使用帐户权限。我的问题是,我试图使用jquery .scrollTop(0)函数,无论我如何尝试都无法使用。我必须为模态设置一个事件,直到模态停止动画后才重置滚动条。最终对我有用的代码在这里:

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

1

如果html内容溢出单个视口,则仅使用javascript对我有用:

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

问候,


1

这是它对我有用的唯一方法,并且具有平滑的滚动过渡:

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

1

当通过类名获取元素时,不要忘记返回值是一个数组。因此,此代码:

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

无法运作。请改用下面的代码。

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

我认为其他人可能会遇到和我类似的问题。因此,这应该可以解决问题。


0

这两个代码对我来说就像一个魅力,第一个将滚动到页面顶部,但是如果您想滚动到某个特定的div,请使用第二个带有您的div ID的代码。

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

如果要按类名滚动到,请使用以下代码

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

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

0

ID应该具有具有溢出css属性的相应div的ID。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.