【问题标题】:Prevent child element from scrolling, but allow scrolling parent防止子元素滚动,但允许滚动父元素
【发布时间】:2021-08-15 06:41:54
【问题描述】:

如果我有一个整个页面都可以滚动的页面,并且其中还有一些可滚动的子元素(例如,它们有溢出和正常的 js 滚动条),我可以有条件地禁用滚动子元素吗?在许多情况下,用户可能只想滚动外部页面而不是鼠标悬停的子元素。我们认为,在 UI 设计中,像这样具有可滚动的子元素通常是一种反模式,但它是必需的。

我尝试了例如使用捕获事件处理,但不确定我是否有正确的设置

我还尝试了一些解决方案,有条件地提到可能添加溢出:隐藏就像这里How to prevent scrolling in a child from scrolling its parent,但这实际上使得子元素的滚动状态不被保留(例如,它将子滚动卡回顶部)

【问题讨论】:

标签: javascript scroll dom-events


【解决方案1】:

touch-actionpointer-events 进行实验。

它可能会让你非常接近你想要的。

例如您可以根据自己的条件添加或删除一个类。


section, div {
  overflow-y: scroll;
  overflow-x: none;
}

section {
  max-height: 6em;
  background-color: lightblue;
}

div {
  background-color: rgba(0,0,0,0.5);
  height: 2em;
}

div.special {
  pointer-events: none;
  touch-action: none;
  color: white;
}
<section>
  <div>
    1 1 1<br />
    2 2 2<br />
    3 3 3<br />
    4 4 4<br />
    5 5 5<br />
    6 6 6<br />
  </div>
  <div class="special">
    1 1 1<br />
    2 2 2<br />
    3 3 3<br />
    4 4 4<br />
    5 5 5<br />
    6 6 6<br />
  </div>
  <div>
    1 1 1<br />
    2 2 2<br />
    3 3 3<br />
    4 4 4<br />
    5 5 5<br />
    6 6 6<br />
  </div>
</section>

【讨论】:

  • 这是一个很好的建议...这有点棘手,因为这是否意味着我必须连接逻辑才能将此类添加到具有子滚动条的代码的基本上所有部分?
  • 您需要将这些样式添加到“正常”滚动规则的任何“例外”中,是的。这可以是单独的,也可以是基于您的 DOM 结构的分组级别。除此之外,没有提供足够的详细信息来准确了解您要查找的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 2013-02-14
相关资源
最近更新 更多