2013-02-20 7 views
14

mogę użyć:Czy są dostępne bulgotania dla zdarzeń ładowania obrazów?

window.addEventListner(); 

w jakiś sposób.

Wszystkie moje zdjęcia mają display = 'none'.

Po załadowaniu obrazu,

Chcę ustawić display = 'inline'

ten sposób można normalizacji, co jest wyświetlane, gdy obraz jest pobierany.

W takim przypadku nie można załadować wstępnie obrazów.

Odpowiedz

10

Impreza load/onload nie bańka (reference, reference), więc co prosisz, nie jest możliwe. Będziesz musiał dołączyć procedurę obsługi zdarzeń do każdego węzła obrazu.

+0

Nawet "nienormalnie". Jeszcze jedna odpowiedź: http://www.w3.org/TR/DOM-Level-3-Events/#event-type-load – bfavaretto

+0

Wydawałoby się, że to jest to, do czego służyło bulgotanie zdarzeń. Ale nie sądzę, zaktualizowałem moje pytanie. –

+0

Wiele innych zdarzeń bańka, takich jak "kliknij", a to z pewnością jest przydatne. Ale fakt, że 'load' nie powoduje bańki, nie oznacza, że ​​nie możesz wczytać obrazów. Dlaczego nie utworzyć jednej funkcji do obsługi 'load' dla wszystkich obrazów? – bfavaretto

0
$('img').on('load', function() { 
    $(this).show() 
}) 

Bez bibliotek:

window.onload = function() { 
    var imgs = document.querySelectorAll('img') 
    imgs.onload = function() { 
     this.style.display = 'inline'; 
    } 
} 
+0

@pure_code aktualizowane moją odpowiedź dla ciebie? :-) – Neal

+0

Czy nie jest 'window.onload' zwany * po * wszystkie obrazy zostały załadowane? –

+0

@FelixKlik niekoniecznie. – Neal

1

Można użyć obsługi Image.onload zdarzeń, ale nie ma zaangażowany bulgotanie.

var i = new Image; 
i.onload = function() { 
    this.style.display = 'block'; 
} 
2
Array.prototype.forEach.call(document.querySelectorAll('img'), function (elem) { 
    elem.addEventListener('load', function() { 
     this.style.display = 'inline'; 
    }); 
    if (elem.complete) { 
     elem.style.display = 'inline'; 
    } 
}); 

Zdarzenie „obciążenie” nie wywoła jeśli obraz jest nawiasem mówiąc już załadowany; w ten sposób sprawdzamy, czy jest już ustawiona complete.

39

Zastosowanie przechwytywanie zdarzeń słuchacza na pewnym węźle DOM innego niż window (body lub drugiego rodzica elementów graficznych zainteresowania):

document.body.addEventListener(
    'load', 
    function(event){ 
     var tgt = event.target; 
     if(tgt.tagName == 'IMG'){ 
      tgt.style.display = 'inline'; 
     } 
    }, 
    true // <-- useCapture 
) 

Z tym nie ma do (re) attach programy do obsługi zdarzeń podczas iteracji poprzez document.images.

To samo dotyczy również dynamicznie wstawianych obrazów.

Same is true for image's error loading events. MDN: addEventListener

+1

Nigdy nie pomyślałem, aby spróbować tego dla delegowania zdarzeń zdarzeń ładowania obrazu. Całkiem genialnie! Powodem, dla którego nie może to być okno: "Ze względów starszych, zdarzenia ładowania zasobów w dokumencie (np. Obrazy) nie zawierają okna w ścieżce propagacji w implementacjach HTML" – Adria

Powiązane problemy