在 JavaScript 中从 img.load() 返回 img

发布于 2024-11-26 11:37:04 字数 503 浏览 0 评论 0原文

我有一个 for 循环:

for(var i = 0; i < r.length; i++){
    var img=loadImage(r.id);
    $gallery.append(img);
}

和加载图像函数:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    $(img).load(function(){  
        return this;
    })     
    .attr({'src':$url,'id':id});
}

在上面的函数中,我想返回 img,以便我可以在 for 循环中使用它,但这似乎不起作用,我没有显示图像。我知道我可以在 load 中使用 $gallery.append(this) ,效果很好,但我需要将上述方法用于其他目的。那么有什么建议我可以用这种方式做到这一点吗?谢谢。

I have a for loop:

for(var i = 0; i < r.length; i++){
    var img=loadImage(r.id);
    $gallery.append(img);
}

and loading image function:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    $(img).load(function(){  
        return this;
    })     
    .attr({'src':$url,'id':id});
}

in the function above, I want to return the img so I can use it in the for loop, but this does not seem to work, I don't get image to show up. I know I can use $gallery.append(this) inside load which works well, but I need to use the above method for other purposes. so any suggestion that I can do it in this way? thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌化 2024-12-03 11:37:04

使用 jquery 的 load 事件加载图像可能有点错误(取自 jquery文档) :

  • 它不能一致地、可靠地跨浏览器工作
  • 如果图像 src 设置为与之前相同的 src,它就无法在 WebKit 中正确触发
  • 它不能正确地在 DOM 树中冒泡
  • 可以停止为图像开火 通过

在您的情况下,我将使用两种不同方法之一:

  • 回调
  • 事件

通过回调,您可以在异步任务完成时执行某些功能:

function loadImage(id,callback){
    var $url='url/'+id;
    var img = new Image();
    $(img).load(function(){  
        if(typeof callback == 'function')
            callback(this);
         return this;
     }).attr({'src':$url,'id':id});
}

for(var i = 0; i < r.length; i++){
    var img=loadImage(r.id,function(_img){
         $gallery.append(_img);
    });

}

事件,您可以拥有更多功能。 ..
您可以创建并触发自己的事件,并根据需要绑定任意数量的事件处理程序。
使用个人事件的示例:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    $(img).load(function(){  
        $(document).trigger('my_special_event',[this]);
     }).attr({'src':$url,'id':id});
}

for(var i = 0; i < r.length; i++){
    var img=loadImage(r.id);
}

$(document).bind('my_special_event',function(e,img){
     $gallery.append(img);
});

Using jquery's load event to load images can be a bit buggy (taken from the jquery documentation) :

  • It doesn't work consistently nor reliably cross-browser
  • It doesn't fire correctly in WebKit if the image src is set to the same src as before
  • It doesn't correctly bubble up the DOM tree
  • Can cease to fire for images that already live in the browser's cache

In your case, I'd use one of two different approaches:

  • callbacks
  • events

With callbacks, you have the power to execute some functionality when an asynchronous task is done :

function loadImage(id,callback){
    var $url='url/'+id;
    var img = new Image();
    $(img).load(function(){  
        if(typeof callback == 'function')
            callback(this);
         return this;
     }).attr({'src':$url,'id':id});
}

for(var i = 0; i < r.length; i++){
    var img=loadImage(r.id,function(_img){
         $gallery.append(_img);
    });

}

With events, you have even more power...
You can create and trigger your own events and bind as many eventHandlers as you want.
An example of using personal events:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    $(img).load(function(){  
        $(document).trigger('my_special_event',[this]);
     }).attr({'src':$url,'id':id});
}

for(var i = 0; i < r.length; i++){
    var img=loadImage(r.id);
}

$(document).bind('my_special_event',function(e,img){
     $gallery.append(img);
});
向日葵 2024-12-03 11:37:04

如果您想要 Element:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    return $(img).load(function(){  
            return this;
        })
        .attr({'src':$url,'id':id})
        .get(0);
}

如果您想要 jQuery 对象:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    return $(img).load(function(){  
            return this;
        })
        .attr({'src':$url,'id':id});
}

If you want the Element:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    return $(img).load(function(){  
            return this;
        })
        .attr({'src':$url,'id':id})
        .get(0);
}

If you want the jQuery object:

function loadImage(id){
    var $url='url/'+id;
    var img = new Image();
    return $(img).load(function(){  
            return this;
        })
        .attr({'src':$url,'id':id});
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文