Вы ищете медиа-события , в которых говорится, что вы можете использовать, например, loadeddata
.
Я хотел бы затронуть некоторые другие пункты:
- Символы внутри группы символов регулярного выражения не нуждаются в экранировании.
- Почему бы не использовать jQuery для создания элементов и привязки обработчика событий?
Я немного изменил ваш код:
$.each(assets, function() {
var r = /\.([^.]+)$/,
ext = r.exec(this), //get file type
tmp = ext[1] === 'png'
? $("<img>")
: $("<audio>"),
eventName = ext[1] === 'png'
? 'load'
: 'loadeddata';
tmp
.on(eventName, function() {
var i = assets.indexOf(this);
assets.splice(i, 1);
if (!assets.length){
console.log('all loaded');
app.build();
}
})
.attr("src", this); // only set after adding the load callback
// to avoid a possible race condition
});