仅使用javascript替换损坏的图像

时间:2012-09-27 15:58:28

标签: javascript image d3.js

这似乎是一个问了一千次的问题......但是我已经花了两天时间而且尚未解决这个问题。

我见过像this这样的答案,特别是第一个。但是当我尝试只使用javascript时,程序永远不会等待。即使我把回报放在

if(image.complete) {return path;}

它宁愿退出,只需等待图像加载。

这是我的代码。我希望它纯粹是Javascript,因为函数的返回值是d3.js中svg:image的attribut的值

.attr("xlink:href", function (d) {
          var imagePath = "http://xxxxx/peopleimages/" + d.num + ".jpg";
          var img = new Image();
          function onErrorHandler(image) {
              image.onerror = "";
              image.src = genericPath;
              return false;
          }
          img.onerror = onErrorHandler(this);
          img.src = imagePath;

          return img.src;

提前致谢!

2 个答案:

答案 0 :(得分:0)

代码应该更像这样:

function onErrorHandler() {
    $(this).off('error', onErrorHandler);
    this.src = genericPath;
    return false;
}
$(img).on('error', onErrorHandler);
img.src = imagePath;

return img.src;

答案 1 :(得分:0)

我不知道你需要什么,但通常我使用onload和onerror而且我没有问题。有些人喜欢这样:

function loadImg(targetId,imgURL){
    var contenedorImgs = document.getElementById("container");
    target = document.getElementById(targetId);
    var img = new Image();
    img.onload = function(){
        contenedorImgs.replaceChild(img,target);
        img.id = targetId;
    };
    img.onerror = function(){
        img.src = "http://marcocavalieri.es/fotos/miniaturas/1B.jpg";
    };
    img.src = "http://dev.marcocavalieri.es/fotos/" + imgURL;
} 

此代码是我女儿和我为Marco Cavalieri开发的真实代码的摘录,您可以在http://dev.marcocavalieri.es看到,在这种情况下,我预加载图像,因为我需要一些淡入淡出和淡出。 您可以在小提琴中看到活生生的摘录示例:http://fiddle.jshell.net/hmariod/kCRHV/1/

Bonneannéeetbonnesanté!