新答案的原因
2018 年很多人都需要 Vanilla Javascript 。由于当今存在的许多框架和 Javascript 库不能很好地与 jQuery 配合使用。曾几何时,使用 jQuery 解决方案回答所有 Javascript 问题是可以接受的,但它不再可行。
问题
加载 C3.js 或 D3.js 图表时,如果在页面加载期间视口不在站点中,则图表无法正确呈现。
例子
如果您输入 URL,则打开一个新选项卡,然后在页面加载后返回。
如果您刷新包含图表的页面,则最小化浏览器并在页面加载后将其打开。
如果您刷新或转到带有图表的页面,然后滑动到计算机上的新窗口。然后在加载后返回带有图表的页面。
在所有这些情况下,您的 C3.js / D3.js 图形将无法正确呈现。通常你会看到一个空白的画布。因此,如果您期待一个条形图,您会看到一个没有绘制条形的画布。
背景
虽然我已经看到这个问题得到了回答,但我需要一个不使用 jQuery 的答案。现在我们已经到了 jQuery 无法解决所有问题的时代,我认为为这个问题提供一个普通的 Javascript 答案似乎很合适。
我的团队面临的问题是,如果您刷新页面并滑开或最小化,C3.js / D3.js 图表将无法加载。基本上,如果您没有留在页面上并将其保留在站点中直到加载完成,您将不会看到图表,直到您再次调整页面大小。我知道这是每个使用 C3.js / D3.js 的人都会遇到的问题,但我们专门在 Salesforce 中使用 Lightning。
回答
我们的解决方法是在初始化图表的控制器函数中添加它。任何人都可以在他们编写的任何函数中使用它来初始化他们的 C3.js / D3.js 图,而不管他们的堆栈如何。这不依赖于 Salesforce,但如果您在 Salesforce 中遇到此问题,它确实有效。
document.addEventListener('visibilitychange', () => {
console.log(document.visibilityState);
window.dispatchEvent(new Event('resize'));
});