2014-04-10 10 views
5

Ho un con un ID doi e desidero manipolarlo con JavaScript quando è completamente caricato (la manipolazione utilizza le dimensioni delle immagini non fornite in il DOM).JS esegue la funzione se l'elemento è caricato - no jQuery

Quello che ho cercato:

document.getElementById('doi').onload = function(){ 
     console.log('Div of Interest is loaded'); 
    }; 

Questo non ha funzionato perché la divisione è stata probabilmente caricato prima ho impostato il gestore eventi. Così in breve, ciò che deve essere fatto è la seguente:

  • Controllare se l'elemento viene caricato
    • in tal caso? -> funzione di callback incendio
    • se non? -> imposta un gestore di eventi con callback quando è completamente caricato.
+0

potrebbe essere necessario un qualche tipo di meccanismo di temporizzazione per vedere se il div è in movimento oppure no. –

+0

Non so cosa significhi: $ - altoparlante olandese nativo qui –

+0

Go orange! : P Fondamentalmente quello che stavo dicendo è forse usare un setTimeout che monitora il contenuto all'interno del div, e quando non è cambiato per un certo periodo di tempo, allora puoi registrare il messaggio caricato.Se è stato modificato, ricorrere alla funzione con setTimeout per continuare il monitoraggio –

risposta

2

Pure javascript: jsFiddle Demo utilizzando jQuery: jsFiddle Demo

(Le demo sono alcune impostazioni che è solo riempitivo per visualizzare il contenuto cambia)

Per espandere sulla nozione (solo in rari casi) di utilizzare i timer per monitorare il contenuto di un elemento. Il contenuto da osservare sarebbe più che probabile una combinazione di testo, html, larghezza e altezza. Ecco un modo per monitorare quelli:

javascript

function monitor(element,callback){ 
var self = element; 
var h = self.clientHeight; 
var w = self.clientWidth; 
var txt = self.innerText; 
var html = self.innerHTML; 
(function flux(){ 
    setTimeout(function(){ 
     var done = 
      h == self.clientHeight && 
      w == self.clientWidth && 
      txt == self.innerText && 
      html == self.innerHTML; 
     if(done){ 
     callback(); 
     }else{ 
     h = self.clientHeight; 
     w = self.clientWidth; 
     txt = self.innerText; 
     html = self.innerHTML; 
     flux(); 
     } 
    },250); 
})() 
}; 

jQuery estensione

$.fn.monitor = function cb(callback){ 
var set = this.first(); 
var h = set.height(); 
var w = set.width(); 
var txt = set.text(); 
var html = set.html(); 
(function flux(){ 
    setTimeout(function(){ 
     var done = 
      h == set.height() && 
      w == set.width() && 
      txt == set.text() && 
      html == set.html(); 
     if(done){ 
     if($.isFunction(callback))callback(); 
     }else{ 
     h = set.height(); 
     w = set.width(); 
     txt = set.text(); 
     html = set.html(); 
     flux(); 
     } 
    },500); 
})() 
}; 
1

Per un'immagine, è possibile controllare la sua proprietà width. Se è diverso da zero, l'immagine è stata caricata, o almeno caricata in misura sufficiente a conoscere le sue dimensioni.

+1

Ma non se è definito in css, vero? –

+0

Hm .. mi fa molto più vicino. Ma questo sembra solo per le immagini. –

-1

È forse possibile utilizzare la transitionend event se le dimensioni sono l'unità di misura.

Impostare una transizione CSS per quell'elemento (utilizzando JS) e associare un listener di eventi a quell'elemento. Se si utilizza semplicemente JS, è necessario ripetere le chiamate addEventListener con i prefissi dei fornitori.

#doi { 
    -webkit-transition: width 0s linear; 
      transition: width 0s linear; 
} 

JS:

var afterWidthChange = function(event) { 
    var doi = event.target; 

    console.log('The width of #doi has changed.', doi); 
}; 

document.getElementById('doi').addEventListener('transitionend', afterWidthChange, false); 
document.getElementById('doi').addEventListener('webkitTransitionEnd', afterWidthChange, false); 

There is a lib/polyfill for older browsers too.

Problemi correlati