【发布时间】:2019-07-08 13:16:27
【问题描述】:
我正在寻找一种通用解决方案来查找元素的可滚动容器(我想听一下滚动事件)。 通常的方法是在 DOM 树中向上遍历以检查父元素,直到其中一个元素是可滚动的 - here 是这样的一些解决方案。 但是,如果 shadow DOM 也在图片中,这将失败。
这是一个示例结构:
<app-home>
<ion-content>
#shadow-root
<div class="inner-scroll">
<slot>
-> <my-element> (reveal)
</slot>
</div>
<my-element>...</my-element>
</ion-content>
</app-home>
在上面的示例中,可滚动元素是.inner-scroll,它位于ion-content 的shadow dom 内。由于my-element 通过slot 进入容器,因此向上遍历树永远不会到达滚动容器(my-element -> ion-content -> app-home)。
我发现ion-content 有一个getScrollElement 方法,可以在这种特定情况下使用,但是我想知道是否有一个通用的基于 DOM 的解决方案,因为我希望它能够工作而不管上下文。
更新:
更清楚地说,我希望my-element 是一个独立的、可重用的组件,无论它放在哪里,都可以找到它的滚动容器。
我发现,内置的 scrollIntoView 方法适用于 DOM 元素,它滚动正确的容器,这意味着浏览器以某种方式计算出来,但没有公开返回滚动容器的方法。
另一个想法是在更高级别上监听滚动事件,而不知道确切的元素,但这也不起作用,因为滚动事件不会传播。
有什么想法吗?
【问题讨论】:
标签: javascript dom shadow-dom ionic4