2015-09-26 18 views
6

Ho il seguente coffeescript, che funziona tranne il fatto che quando le immagini impiegano un po 'di tempo a caricarsi, viene eseguito prima che le immagini vengano caricate e quindi non ha l'effetto desiderato:Adattamento di un coffeescript per utilizzare window.onload

ready = -> 
    jQuery -> 
    $('.box').find('img').each -> 
     imgClass = if @width/@height > 1 then 'wide' else 'tall' 
     $(this).addClass imgClass 
     return 
    return 


$(document).ready(ready) 
$(document).on('page:load', ready) 

Come posso eseguire la mia funzione solo dopo aver caricato l'intera finestra?

mio miglior tentativo sembra così lontano come

window.onload = -> 
    $('.box').find('img').each -> 
    imgClass = if @width/@height > 1 then 'wide' else 'tall' 
    $(this).addClass imgClass 
    return 
    return 

ma non funziona. Ho provato anche diverse altre possibilità, ma non riesco a capire che cosa non va.

La mia domanda è diversa da this one poiché non desidero attendere fino a quando tutti i coffeescripts hanno completato il caricamento, voglio attendere fino a quando tutte le immagini nella mia pagina web non sono state caricate.

+0

possibile duplicato di [Il coffeescript ha un evento onLoad come per il browser] (http://stackoverflow.com/questions/6656951/does-coffeescript-have-an-onload-like-event-for-the-browser) –

+0

Decisamente non un duplicato. Vedi la mia modifica che spiega perché. – Dennis

+0

Grazie per il chiarimento. –

risposta

3

Per eseguire il codice desiderato DOPO che tutte le immagini sono state caricate, utilizzare il metodo load() di jQuery nella finestra . document guarda il DOM, mentre window controlla il contenuto.

Nel caffè, sarebbe simile a questa:

$(window).load -> 
    alert 'All images are loaded' 

La differenza tra questo e ciò che si aveva è che si stava utilizzando window.onload mentre io sto suggerendo $(window).load().