使用 javascript 更改页面内容后相当于 readystatechange
Equivalent of readystatechange after changing page content using javascript
我正在使用 javascript 动态修改页面的一部分(仅加载一次)。
我正在寻找等效于 readystatechange
的事件,该事件将在部分页面更改后加载所有图像、字体...时触发。
我怎样才能做到这一点?
注意:出于性能原因,不能重新加载整个页面
我正在使用普通 JS:
containerElement.innerHTML = htmlString;
如果您使用 vanilla JS 手动执行所有操作,那么您可以做的最好的事情是检测支持加载事件(图像、视频等)的子元素何时全部完成加载。它不是正在加载的 DIV 的完美表示,但也许它足够接近您的目的。
因此,在您设置 DIV 的 innerHTML 之后,调用一个函数来执行如下操作:
function onDivLoaded(div, callback) {
const loadable_types = ['img', 'video', 'frame', 'frameset', 'iframe', 'link', 'script'];
const total = {};
const loaded = {};
function tryCallback(type) {
++loaded[type];
const hasMore = loadable_types.some(type => loaded[type] < total[type]);
if (!hasMore) { callback(div); }
}
loadable_types.forEach(type => {
const els = div.getElementsByTagName(type);
total[type] = els.length;
loaded[type] = 0;
els.forEach(element => {
element.addEventListener('load', () => tryCallback(type));
element.addEventListener('error', () => tryCallback(type));
});
});
}
所以基本上,在设置 innerHTML 之后,您将调用 onDivLoaded 并将其传递给容器 DIV 并在加载时将回调传递给 运行。然后,这会将加载和错误处理程序附加到支持这些事件的 DIv 内的每个 DOM 元素,并且每当触发一个时,它都会跟踪从总数中加载了多少。当 100% 的可加载元素被加载时,它会触发回调。
我正在使用 javascript 动态修改页面的一部分(仅加载一次)。
我正在寻找等效于 readystatechange
的事件,该事件将在部分页面更改后加载所有图像、字体...时触发。
我怎样才能做到这一点?
注意:出于性能原因,不能重新加载整个页面
我正在使用普通 JS:
containerElement.innerHTML = htmlString;
如果您使用 vanilla JS 手动执行所有操作,那么您可以做的最好的事情是检测支持加载事件(图像、视频等)的子元素何时全部完成加载。它不是正在加载的 DIV 的完美表示,但也许它足够接近您的目的。
因此,在您设置 DIV 的 innerHTML 之后,调用一个函数来执行如下操作:
function onDivLoaded(div, callback) {
const loadable_types = ['img', 'video', 'frame', 'frameset', 'iframe', 'link', 'script'];
const total = {};
const loaded = {};
function tryCallback(type) {
++loaded[type];
const hasMore = loadable_types.some(type => loaded[type] < total[type]);
if (!hasMore) { callback(div); }
}
loadable_types.forEach(type => {
const els = div.getElementsByTagName(type);
total[type] = els.length;
loaded[type] = 0;
els.forEach(element => {
element.addEventListener('load', () => tryCallback(type));
element.addEventListener('error', () => tryCallback(type));
});
});
}
所以基本上,在设置 innerHTML 之后,您将调用 onDivLoaded 并将其传递给容器 DIV 并在加载时将回调传递给 运行。然后,这会将加载和错误处理程序附加到支持这些事件的 DIv 内的每个 DOM 元素,并且每当触发一个时,它都会跟踪从总数中加载了多少。当 100% 的可加载元素被加载时,它会触发回调。