Javascript erst starten wenn Bild geladen
waschaer_siegen
- javascript
0 fastix®
Tach!
Der Titel ist etwas unglücklich gewählt. Muss das genauer beschreiben....
Ich schreibe an einem Greasemonkey-Script. Das soll bei einer Fotogalerie einen Link zu dem Bildersuchdienst Tineye einfügen. Dafür benötige ich natürlich die URL von dem Bild. Es funktioniert auch "fast".
Die Fotogalerie selber arbeitet auch mit JS. Wenn ich jetzt ein kleines Vorschaubild anklicke um mir das große Bild anzeigen zu lassen, von dem ich auch die URL benötige, erscheint erstmal so ein kleines "loader.gif" - kennt man - diese drehenden Kreise. Dann erwische ich aber dummerweise die URL von diesem gif, und nicht von dem Bild was nachgeladen wird.
Das Script darf sich also erst die URL holen wenn das loader.gif weg und das eigentliche Bild geladen ist.
Ich könnte da jetzt mit while was basteln.... damit sich das Script zu tode wartet..... das kann es ja nicht sein.
function gallery(){
// Wenn vorhanden alten Link erstmal entfernen
var tineye_link = document.getElementById('tineye_link');
if (tineye_link) {
tineye_link.parentNode.removeChild(tineye_link);
}
// Die Bild-URL | Hier erwische ich ständig das "loader.gif"
var picActions = document.getElementById('picActions');
var pic_URL = document.getElementById('imgContainer').getElementsByTagName('img')[0].getAttribute('src');
// Link einfügen
var new_li = document.createElement('li');
new_li.setAttribute("class","tineye");
new_li.setAttribute("id","tineye_link");
new_li.innerHTML = '<font color="#135AA0"><a href="http://www.tineye.com/search?url='+pic_URL+'">Tineye</a></font>';
var ul = picActions.getElementsByTagName('ul')[0];
ul.appendChild(new_li);
}
Moin!
var pic_URL = document.getElementById('imgContainer').getElementsByTagName('img')[0].getAttribute('src');
Also wenn ich Dich richtig verstanden habe, dann hast Du doch hier in pic\_URL das loader.gif stehen.
Das prüfst Du also zuerst. Wenn da loader.gif drin ist
- <http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout@title=erteilst Du den Auftrag gallery() in 0,25 Sekunden aufzurufen >und
- brichst ab. (z.B. mit return)
fertich!
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
--
[Des fastix kleines CMS](http://www.fastix.org/fastix-cms/)
Ich versuche gerade etwas anderes.... warum bin ich nicht eben darauf gekommen ;-)
Der Aufruf von der Funktion "gallery" darf ja schließlich erst erfolgen wenn das Element mit der ID 'imgContainer' geladen ist....
///// Aktuelle URL /////
url = document.URL
if (url.indexOf('person') > -1)
personsSite();
else if (url.indexOf('gallery') > -1)
document.getElementById('imgContainer').getElementsByTagName('img')[0].addEventListener('load',gallery,true)
Scheint zu funktionieren. Muss ich noch etwas mehr testen.
Hallo waschaer_siegen,
document.getElementById('imgContainer').getElementsByTagName('img')[0].addEventListener('load',gallery,true)
das funktioniert aber nicht im IE. Wenn nur ein Handler aufgerufen werden soll, würde ich mit
document.getElementById('imgContainer').getElementsByTagName('img')[0].onload=gallery;
arbeiten, sonst benötigst du ein etwas aufwändigeres addEvent.
Gruß, Jürgen
das funktioniert aber nicht im IE.
Da es ein Greasmonkey-Script ist kann ich das zum Glück ignorieren ;-)
Hallo waschaer_siegen,
das funktioniert aber nicht im IE.
Da es ein Greasmonkey-Script ist kann ich das zum Glück ignorieren ;-)
stimmt. Da habe ich nicht dran gedacht.
Gruß, Jürgen