我有一个页面,它在滚动事件中添加和删除一些内容。
现在,当使用Chrome时(IE11似乎没有这种行为),每当在页面上添加和删除内容时,都会生成滚动事件(我猜是为了保持客户端视图在页面更改时的一致性)。
我不想这样在内容改变时生成的滚动事件将触发更多的内容改变,这又将触发更多的滚动事件。
有什么建议可以阻止所有浏览器的这种行为吗?我不希望任何自动滚动发生。我只希望用户滚动注册。
下面是一些简单的示例代码。点击“点击”按钮将重新排列彩色差异,并使页面自行滚动(在Chrome中,而不是IE11)...
function removeStuff(){
var elem = document.getElementById("center");
document.getElementById("container").removeChild(elem);
document.getElementById("container").appendChild(elem);
}
#top {
background-color: green;
height:1500px;
}
#center {
background-color: blue;
height:1000px;
}
#bottom {
background-color: red;
height:1500px;
}
<div id="container">
<div id="top"></div>
<div id="center"></div>
<button id="button" onclick="removeStuff()">click</button>
<div id="bottom"></div>
</div>
5条答案
按热度按时间3zwjbxry1#
这是Chromium最近添加的一个功能,称为滚动锚定。
在浏览器中禁用:转到
chrome://flags/#enable-scroll-anchoring
并将“滚动锚定”设置为“禁用”。通过CSS禁用:
字符串
o2g1uqev2#
我不认为你可以禁用这种行为,但你可以解决它。由于Chrome在调用
removeChild
时同步执行scroll
事件,因此您可以通过在removeChild
之前将全局布尔值设置为true
并在removeChild
之后将其设置回false
来检测这些类型的滚动事件。字符串
你的scroll handler看起来像这样:
型
li9yvcax3#
如果您使用的是bootrap 4/5,这是一个解决方案
字符串
ugmeyewa4#
chrome自动滚动:启用/禁用/windows /ubuntu
x1c 0d1x的数据
5t7ly7z55#
字符串
overflow-anchor CSS属性提供了一种退出浏览器滚动锚定行为的方法,该行为调整滚动位置以最小化内容移动。
默认情况下,滚动锚定行为在任何支持它的浏览器中都处于启用状态。因此,通常只有在文档或文档的一部分中遇到滚动锚定问题并需要关闭该行为时,才需要更改此属性的值。
从https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor