2012-07-03 3 views
2

javascript 이미지 로더를 만들고 싶습니다.자바 스크립트 다중 이미지 로더

이 방법
function ImgLoader() { 

    this.imgs_ = { 
     0 : {name: "floor", img: new Image()}, 
     1 : {name: "highlight", img: new Image()}, 
     2 : {name: "player-north", img: new Image()}, 
     3 : {name: "player-south", img: new Image()}, 
     4 : {name: "player-west", img: new Image()}, 
     5 : {name: "player-east", img: new Image()}, 
     6 : {name: "food_small", img: new Image()}, 
     7 : {name: "food_medium", img: new Image()}, 
     8 : {name: "food_large", img: new Image()}, 
    }; 

} 

ImgLoader.prototype.load = function() { 

for (var i = 0; typeof(this.imgs_[i]) != "undefined"; i++) 
    this.imgs_[i].img.src = "img/" + this.imgs_[i].name + ".png"; 
} 

, 나는 내 이미지의 "배열"을 가지고, 내가 나중에 쉽게 작업 할 수 있습니다 :

이 내가 시도 할 것입니다. 하지만 이미지가 거의로드되지 않는 경우가 있습니다.

이런 종류의 로더를 만드는 가장 좋은 방법은 무엇입니까?

감사합니다.


좋아 SIME VIDAS 아주 좋은 솔루션을 말했다 :하지만 ... 우리는 이미지가 완전히로드되었는지 확신 할 수 없다!

var imgs = Object.create(null); // or var imgs = {}; 

[ 
    'floor', 
    'highlight', 
    'player-north', 
    'player-south', 
    'player-west', 
    'player-east', 
    'food_small', 
    'food_medium', 
    'food_large' 
].forEach(function (name) { 
    var img = new Image; 
    img.src = 'img/' + name + '.png'; 
    imgs[ name ] = img; 
}); 

사용은 다음과 같습니다 :

코드입니다

거짓

imgs.food_small; 

하지만 때로는 우리가 볼 수있는이

console.log(imgs.food_small.complete); 

같은 이미지 완전한 속성을 확인하면

생각합니다. 그것을 사용하여 다음 기능으로 모든 이미지를 삽입하려면

function preload(arrayOfImages) { 
      $(arrayOfImages).each(function(){ 
       $('<img/>')[0].src = this; 
      }); 
     } 

이기 때문에 우리는이 기능을 foreach는

+0

var imgs = Object.create(null); // or var imgs = {}; [ 'floor', 'highlight', 'player-north', 'player-south', 'player-west', 'player-east', 'food_small', 'food_medium', 'food_large' ].forEach(function (name) { var img = new Image; img.src = 'img/' + name + '.png'; imgs[ name ] = img; }); 

지금 당신이 그렇게 같은 각각의 이미지를 검색 할 수 있습니다

jQuery(document).ready(function(){ preload([ '/images/image1.png', '/images/image2.png' ]); }); 
Mike

+0

예 jQuery를 사용할 수 있습니다! :) – user1499872

+0

당신은 HTML에 추가하기 전에 완전히로드되지 않았습니까? 아니면 렌더링 된 페이지에 전혀 표시되지 않습니까? – dano

답변

1

내가 그것을 할 거라고 어떻게 당신은 이것을 위해 jQuery를 사용할 수 있습니까?
+0

예, 꽤 좋은 생각입니다. 사전로드 된 food_small 이미지를 검색하여 캔버스에 그릴 수있는 방법은 무엇입니까? (예 :) – user1499872

+0

@ user1499872 답변을 업데이트했습니다 ... –

+0

와우! 아주 좋아 :) 매우 많은 Šime Vidas 고맙습니다! 위대한 아이디어! 그냥 조금 질문 ... 새로운 Object() 사이의 차이점은 무엇입니까? 및 Object.create (null); ? – user1499872

0

처음에로드하기 전에 '온로드'와 같은 이벤트에 대해 다음 이미지를 기다려야 삽입해야한다. 예를 들어

imgs.food_small 

:

ctx.drawImage(imgs.food_small, 0, 0);