Это не дублирующий вопрос. Я работаю над загрузкой изображений после полной загрузки страницы. Я хочу передать переменную i
значение функции onload
img, но как-то это не работает.Передать функцию в Javascript
var imgs = document.getElementsByTagName('img');
var totalImages = imgs.length;
for(var i=0; i<totalImages; i++)
{
if(imgs[i].hasAttribute('data-src'))
{
var img = new Image();
img.onload = function()
{
imgs[x].src = imgs[x].getAttribute('data-src');
imgs[x].setAttribute('srcLoaded','true');
//where x is i value from for loop
};
img.src = imgs[i].getAttribute('data-src');
}
}
Я попытался следующим OnLoad функции
img.onload = (function(x)
{
imgs[x].src = imgs[x].getAttribute('data-src');
imgs[x].setAttribute('srcLoaded','true');
//where x is i value from for loop
})(i);
, но таким образом, я увидел, что функция выполняется немедленно, даже изображение не полностью загружено, может быть потому, что это как-то работает, как анонимные функции.
Я также попытался установив атрибут моего img
объекта и получить его значение внутри функции, как этот
img.setAttribute('idi',i);
img.onload = function()
{
var x = img.getAttribute('idi');
imgs[x].src = imgs[x].getAttribute('data-src');
imgs[x].setAttribute('srcLoaded','true');
//where x is i value from for loop
};
но это не работает, как хорошо. Как передать значение переменной i
моей функции onload?
IIFE должен возвращать функцию, подобную 'img.onload = (function (x) { return function() { imgs [x] .src = imgs [x] .getAttribute ('data-src'); imgs [ x] .setAttribute ('srcLoaded', 'true'); // где x is i значение from for loop } }) (i); ' –
Но он все еще является onl y одна функция, так как она перезаписывается на каждой итерации. –
@ArunPJohny Я уже упоминал, что ваш предложенный способ не работает. –