Javascript scrollIntoView()在控制台中工作,但在站点代码中不工作

Javascript scrollIntoView()在控制台中工作,但在站点代码中不工作,javascript,jquery,Javascript,Jquery,我有一个div,其中包含一个用于站点导航中选项卡的表。在手机中,我将div设置为溢出,如下所示: 我想让div自动滚动到当前隐藏的活动选项卡,如下所示: 在另一个SA问题中,建议使用scrollIntoView。在控制台进行测试,效果良好: document.getElementById("active_tab").scrollIntoView({block: "end"}) 我甚至使用了jQuery版本scrollintoview: $('#active_tab').scrollinto

我有一个div,其中包含一个用于站点导航中选项卡的表。在手机中,我将div设置为溢出,如下所示:

我想让div自动滚动到当前隐藏的活动选项卡,如下所示:

在另一个SA问题中,建议使用
scrollIntoView
。在控制台进行测试,效果良好:

document.getElementById("active_tab").scrollIntoView({block: "end"})
我甚至使用了jQuery版本
scrollintoview

$('#active_tab').scrollintoview();
而且效果很好。问题是,当我将实际代码(任意一个)添加到我的站点时,溢出div会滚动一些随机量(似乎是一半)。以下是一个例子:


在Chrome和Safari中尝试过这个。我错过了什么明显的东西吗?我并没有试图滚动整个页面——只是那个隐藏了溢出的div。非常奇怪的是,它直接在控制台中工作,而不是在我的代码中直接工作,也不适用于JS和JQ。据我所知,没有其他的JS等与这个div等相关。

如果没有亲眼看到它,很难判断发生了什么(你能链接到现场或制作JSFIDLE演示吗?),但我会做一个限定猜测

这可能是因为当滚动以编程方式进行时,菜单并没有完全完成渲染。 可能图标或通知尚未显示,因此它会在较短的菜单上向右滚动,然后随着内容的加载而变宽

您可以通过调用
setTimeout


编辑

调用
setTimeout(fn,0)
将立即运行
fn
,但已排队。由于这似乎已经修复了isse,这意味着其他一些任务已经排队,但尚未完全运行,会影响导航条的宽度

然而,如果没有亲眼看到代码运行,就不可能准确地说这是真的。要了解自己,您可以使用:


例如,再次尝试删除
设置超时
,然后删除图标
,看看会发生什么。如果仍然存在此问题,请尝试重新添加图标并删除通知号,等等。

有时问题在于它需要可信事件,如单击或其他。但我没想到这会在名单上。在现场调试实际代码怎么样?超时是个好主意。我回家后会试试的。id位于处于活动状态的上。我认为如果没有这个元素,卷轴甚至不会启动。当您单击可见元素时,根本不会出现预期的滚动。它也在里面。准备好了,我要等到DOM完全加载。完全奇怪-setTimeout可以工作。。。即使时间设置为零,lol。我会独自接受这个答案。我想知道为什么这样做有效,是什么阻止了直接呼叫工作。不知怎么的,对我来说也是有效的。。不知道为什么<代码>按钮.addEventListener('click',()=>setTimeout(()=>section.scrollIntoView(scrollConfig),0))