【发布时间】:2020-09-15 20:10:51
【问题描述】:
我正在尝试使用 HTML 画布创建自定义 ui,但我想保留本机滚动行为。我提出了一个技巧,我用空的透明 div 覆盖我的画布,并根据 div 的滚动位置重新绘制画布。这非常有效,除非尝试允许用户选择在画布上绘制的东西。通常,您会希望元素滚动,这在 Safari 和 Firefox 中都会发生,但在 Chrome 中则不然。
想象下面的 HTML 代码:
.container {
width: 100px;
height: 100px;
overflow: auto;
margin-bottom: 20px;
border: 2px solid black;
}
.content {
width: 1000px;
height: 1000px;
background: rgb(34,193,195);
background: radial-gradient(circle, rgba(34,193,195,1) 0%, rgba(253,187,45,1) 100%);
}
.item {
border: 1px solid blue;
width: 50px;
height: 50px;
}
<div class="container">
<div class="content"></div>
</div>
<div class="container">
<div class="content">
<div class="item"></div>
<div class="item"></div>
</div>
</div>
这将创建两个包含可滚动内容的容器。尝试在它们两个中单击并拖动鼠标按钮,就好像您试图在其中选择一些不可见的文本一样。在 Safari 和 Firefox 中,两个容器都会滚动。在 Chrome 中,只有第二个(包含内部 .item div)会滚动。
有没有办法在 Chrome 中获得所需的行为?我想避免创建大量(数千)DOM 元素。
【问题讨论】:
-
我使用的是 chrome 85.0.4183.102,我可以通过鼠标滚动以及单击 n 拖动来滚动两个容器。
-
@DipenShah 感谢您的评论,我添加了动画 gif 以更好地说明滚动拖动的含义。这在 Chrome 中真的适合您吗?
-
对我来说,在 Chrome 85.0.4183.102 中,我可以同时拖动两者。不过,我必须在第一个框中稍微按住鼠标/触控板。
-
只要我的光标停留在容器元素中,它在两种情况下都对我有用。但在 Firefox 中,即使我的光标在拖动过程中超出容器元素,我也能够滚动。
标签: html css google-chrome scroll