6

私がしなければならないことは、言うのは簡単ですが、(私にとって)実行するのは難しいです:

javascriptを使用して、画像名、つまり「image01.jpg」を指定すると、この画像が特定のフォルダーまたはパス (ローカルまたは Web 上) に存在するかどうかを確認する必要があります。そのフォルダに画像が存在しない場合は、別のフォルダに同じ画像が存在するかどうかを確認する必要があります。

たとえば、疑似コードで

imageToFind = 'image01.jpg'
path1 = 'users/john/images'
path2 = 'users/mike/img'

if path1+'/'+imageToFind exists
    //do something
else
    if path2+'/'+imageToFind exists
        //do something
    else
        print('NOT FOUND')

あなたはどのようなアプローチを提案しますか?最初に ajax を使用して、次に javascript の Image() を使用してこれを達成しようとしましたが、これらの両方のケースで失敗しました。

よろしくお願いします。

4

4 に答える 4

6

onerror コールバックを使用します。

var img = new Image();
img.onerror = function(){
   img = new Image(); // clean the error (depends on the browser)
   img.onerror = function(){
       console.log('not found at all !');
   };
   img.src = path2+'/'+imageToFind;
};
img.src = path1+'/'+imageToFind;
于 2012-10-29T17:26:18.737 に答える
3

Image ノードonloadに対して発火するネイティブ ハンドラーとonerrorイベント ハンドラーにほぼ依存できます。だからそれは次のように見えるかもしれません

var images = ['users/john/images/image01.jpg','users/mike/img/image01.jpg','some/more/path/image01.jpg'];

(function _load( img ) {
    var loadImage = new Image();

    loadImage.onerror = function() {
        // image could not get loaded, try next one in list
        _load( images.shift() );
    };
    loadImage.onload = function() {
        // this image was loaded successfully, do something with it
    };

    loadImage.src = img;
}( images.shift() ));

このコードはおそらく、実際に要求したよりも少し多くのことを行います。基本的には、その配列に必要なだけ多くの画像パスを作成できます。スクリプトは、1 つの画像を正常にロードできるまでリストを検索します。

于 2012-10-29T17:28:04.663 に答える
1

のようなものを試してください

objImg = new Image();
objImg.src = 'photo.gif';

if(!objImg.complete)
 { 
      img.src = path2+'/'+imageToFind; //load other image
  }else{
     img.src = path1+'/'+imageToFind;
  }
于 2012-10-29T17:25:56.707 に答える
0

自問する必要があると思います。画像が存在するかどうかわからないのはなぜですか?

この問題を抱えるべきではない、またはこの方法で解決したいと思います。

于 2012-10-29T17:25:48.360 に答える