[英]Pass variable to function in Javascript
这不是重复的问题。 完成整个页面加载后,我一直在加载图像。 我想将变量i
值传递给img的onload
函数,但是以某种方式不起作用。
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函数?
您可以在回调函数上bind
变量:
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 (x) {
imgs[x].src = imgs[x].getAttribute('data-src');
imgs[x].setAttribute('srcLoaded', 'true');
//where x is i value from for loop
}).bind(img, i);
img.src = imgs[i].getAttribute('data-src');
}
}
页面初始化后,调用该函数一次,然后完成它。
而不是在图像上调用onload 250次以上(按照您对Adam的回答的评论,这会降低您的页面速度,这与您想要的相反),也许可以看看教程为您准备的内容。
重新发明轮子,但是遵循本教程,您可以简单而直接地做到这一点https://varvy.com/pagespeed/defer-images.html (看起来您的代码可能是从中获得的)
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.