Css 显示后滚动返回默认值:Chrome/IE中无
下面是一个例子: 在div容器中向下滚动。然后单击窗口中的任意位置以隐藏元素。然后再次单击以显示该元素。你会注意到在Chrome/IE中,滚动条被重置,但在Firefox中,滚动条仍然保持着你离开滚动条的方式 Chrome/IE或Firefox的标准行为是什么?我应该向Chrome问题追踪者报告吗Css 显示后滚动返回默认值:Chrome/IE中无,css,scroll,browser,standards,behavior,Css,Scroll,Browser,Standards,Behavior,下面是一个例子: 在div容器中向下滚动。然后单击窗口中的任意位置以隐藏元素。然后再次单击以显示该元素。你会注意到在Chrome/IE中,滚动条被重置,但在Firefox中,滚动条仍然保持着你离开滚动条的方式 Chrome/IE或Firefox的标准行为是什么?我应该向Chrome问题追踪者报告吗 提前谢谢你在这方面的帮助,新年快乐,再次感谢,干杯,诸如此类=D我不知道哪一个是正确的,但这是可行的: var offset = 0; $(document).click(function(){
提前谢谢你在这方面的帮助,新年快乐,再次感谢,干杯,诸如此类=D我不知道哪一个是正确的,但这是可行的:
var offset = 0;
$(document).click(function(){
if($('div:visible').length) {
offset = $('div').scrollTop();
}
$('div').toggle().scrollTop(offset);
});
我希望有人有更好的解决方案=/这只是浏览器在显示改变时如何呈现div的一个怪癖 基本上,当显示属性更改时,浏览器会重新流式显示文本 这导致了同样的怪癖
$(document).click(function(){
$('div').style.display = "block";
});
如果您希望在所有浏览器中滚动保持不变,最简单的方法是使用可见性而不是显示 尽管我不确定这两种浏览器(Chrome或Firefox)中的哪一种遵循了这一标准,但我还是会指责Chrome没有“记住”滚动位置是错误的。换句话说,我支持Firefox的行为,但我不确定哪一个是正确的(标准化的)
在有人指出标准文档中哪一个是正确的之前,我将继续指责Chrome。如果尚未报告,我将向Chrome问题跟踪者报告此错误:P
您可以保存当前的
元素。在显示之前,滚动顶部到一些bufferVar
。当display:block
时,重置元素。滚动顶部返回bufferVar
但由于一些我不太清楚的原因,这种方法不会立即起作用。使用类似的方法使其工作:
setTimeout(() => { element.scrollTop = bufferVar; }, 100);
我知道是显示属性导致了这种情况。但我想知道的是哪种行为是正确的行为。我希望向那些行为不正确的浏览器报告这一点。重点不是要找到解决这个问题的方法,而是要向浏览器制造商指出这一点。我知道我可以使用可见性而不是显示,如果位置是绝对的,则可以使用-99999 px top。但在这种情况下,如果所有浏览器都像Firefox一样运行,那就太好了。所以我要向Chrome报告这个bug,如果Firefox的行为不是标准行为,那么至少我会稍微改变一下。我更新了你的小提琴,用iFrame进行测试。到目前为止,只有Firefox在隐藏iframe元素后不保留滚动位置。我很奇怪为什么没有setTimeout()
,它就不能工作,但是有setTimeout(()=>{element.scrollTop=bufferVar;},0)
它可以。我发现Chrome在显示:无代码>和显示:flex代码>。我用这个答案解决了这个问题。超时使它明显地跳转和跳回,但它似乎在没有超时的情况下工作(Chrome v85),就像这样,let oldcoll=window.scrollY;页面[j].style.display=“无”;页面[j+1].style.display=“flex”;滚动到(0,旧滚动)代码>