我有一个 Web 组件,它基本上封装了我的应用程序。在它的影子 DOM 中还有更多的 Web 组件(以及标准的 HTML/CSS 内联 + 外部/脚本内联 + 外部),而这些 Web 组件又可能在它们的影子 DOM 中包含其他组件……等等。
我有一个加载叠加层,我希望显示它,直到所有内容都加载并绘制/样式等...
我觉得应该有一些我可以参与的事件。我做了一些搜索,似乎表明没有,但考虑到它的发展,我认为事情可能已经改变了?如果没有活动 - 我怎么能自己写这个?
仅针对 Chrome 71
我有一个 Web 组件,它基本上封装了我的应用程序。在它的影子 DOM 中还有更多的 Web 组件(以及标准的 HTML/CSS 内联 + 外部/脚本内联 + 外部),而这些 Web 组件又可能在它们的影子 DOM 中包含其他组件……等等。
我有一个加载叠加层,我希望显示它,直到所有内容都加载并绘制/样式等...
我觉得应该有一些我可以参与的事件。我做了一些搜索,似乎表明没有,但考虑到它的发展,我认为事情可能已经改变了?如果没有活动 - 我怎么能自己写这个?
仅针对 Chrome 71
简单回答是不。没有什么神奇的事件可以知道您的应用程序何时完成。
要完成这项工作,您必须提供该事件。
您的代码需要知道它何时完成加载,然后调度一个可以操作的事件。
问题源于这样一个事实,除了开发人员您之外,没有人知道您的代码是否完成。您将不得不等待每个部分完成加载,然后,当您知道一切都已完成时,您仍然希望给浏览器时间来渲染所有内容。因此,只有在这次给浏览器之后,您才会调度您的事件。
你可以这样做:
class MyAppClass extends HtmlElement {
// The rest of your class is defined by you
codeAllFinished() {
setTimeout(() => {
this.dispatchEvent(new CustomEvent('all-finished));
},0);
}
}
codeAllFinished
只有在您知道您的代码已完成收集数据并创建 DOM 元素后,您才会调用该函数。
超时将允许浏览器有时间渲染内容,然后您将发送您的事件以让任何人知道您已完成。