javascript - chrome中嵌套滚动中的数据更改时防止页面滚动
问题描述
我在带有“溢出:滚动”的页面中有一个固定大小的元素,其内容经常更改。我希望这个元素内部发生的变化会影响这个元素的滚动,但不会影响页面滚动。
但是当这个元素放在页面顶部时,页面本身就开始滚动了。我怎样才能防止这种情况?
要重现这种行为(我在 chrome 中遇到了这个问题,但 Firefox 工作正常):
- 打开https://jsfiddle.net/hd2Ltmu0/2/
- 开始滚动页面到灰色元素的中心
- 稍等一下,页面滚动将向上移动
代码示例:
<body>
<div style="overflow-y: scroll;height: 300px">
Content that changes often
</div>
Content that should not move even the upper block is changed
</body>
解决方案
一个 hacky 解决方案是在添加内容之前存储滚动的值并在之后使用它:
setInterval(function() {
var s= $(window).scrollTop();
$('.scrollable').children().first().remove();
$('.scrollable').append('<div>'+(Date.now())+'</div>');
$(window).scrollTop(s);
}, 1000);
;
.demo {
font-size: 24px;
}
.scrollable {
height: 300px;
overflow-y: scroll;
background: #eee;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="demo">
String<br>
String<br>
String<br>
String<br>
<div class="scrollable">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
<div>15</div>
</div>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
String<br>
</div>
推荐阅读
- c++ - 为什么 find() 对字符数组格式的字符串不起作用?
- javascript - 在 React 中,当用于渲染的数组发生变化时,如何避免不必要的重新渲染?
- java - “猜我的号码”游戏,只允许用户进行 3 次猜测
- json - 使用 Stream API 将 Map 列表转换为 JSON 对象
- java - 在 Libgdx 中使用 unProject 时出现空指针异常
- wso2 - wso2 apim 角色验证问题
- date - 我正在尝试通过 awk 命令根据日期字段格式“YYYYMMDD”过滤记录。源文件和目标文件以逗号分隔,并用 Header 分隔
- google-apps-script - 带有 GoogleApps 的 GoogleSheets。创建和复制有点损失
- visual-studio - Visual Studio 社区“Ctrl+K,Ctrl+C”不可用
- python - Python:并排比较两个列表