Zurück   Flashforum > Alternative Technologien > JavaScript & jQuery

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-12-2011, 14:41   #1 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
Question preloader für x bilder

hallo,

und wieder eine frage bei der ich nicht weiterkommen
ich möchte initial ein paar bilder vorladen. erst wenn diese bilder geladen sind soll es im script weitergehen. ich hab ein paar beispiele geunfden, aber es will einfach nicht funktionieren. hat hier jemand eine idee?

HTML-Code:
var images = new Array( "img/page1.png", "img/page2.png", "img/page3.png", "img/page4.png", "img/page5.png", "img/page6.png", "img/page7.png", "img/page8.png", "img/page9.png", "img/page10.png", "img/page11.png", "img/page12.png", "img/page13.png", "img/page14.png", "img/page15.png", "img/page16.png" );

function preload() {

    var image = new Image();
    image.onLoad = function() {

        trace( "DONE" );

   }

    var a = -1;
    var b = images.length - 1;

    while ( a++ < b ) {

        //trace( a + " - " + b );
        trace( images[ a ] );

        image.src = images[ a ];

    }

}
das trace ist bei mir nix anderes als ein simples alert. das trace "trace( images[ a ] )" klappt auch, aber nicht das im onLoad handler. das will einfach nicht.

ich dachte mir ich zähl dann einfach im onload handler eine variable hoch und vergleich dann mit der länge des arrays. stimmen beide werte überrein müssen ja alle bilder geladen sein und ich könnte eine function aufrufen.

aber es klappt wie gesagt nicht und ich weiß nicht wieso

vielen dank für eure hilfe und vg,
szylla
szylla ist offline   Mit Zitat antworten
Alt 08-12-2011, 14:48   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Du lädst die Bilder ja in einer Schleife immer mit derselben Image-Instanz. Ich kann mir gut vorstellen, dass der Browser deshalb einfach nur den letzten Ladeprozess ausführt....
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 08-12-2011, 14:49   #3 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
hatte ich auch schon überlegt. hab das wie gesagt so als bsp gesehen... nur halt ohne das onLoad. und das onLoad wird nicht ein einziges mal aufgerufen
szylla ist offline   Mit Zitat antworten
Alt 08-12-2011, 14:52   #4 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
irgendwas läuft aber grad auch komplett schief. nicht einmal das hier klappt:
HTML-Code:
var image = new Image();
    image.onLoad = function() {

        trace( "DONE" );

    }
    image.src = "img/page1.png";
dabei stimmt der bildpfad in jedem fall
szylla ist offline   Mit Zitat antworten
Alt 08-12-2011, 15:22   #5 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
tja, eines der Probleme wenn alles dynamische Objekte sind => keine (vernünftigen) Fehlermeldungen

onLoad != onload

nur im FF getestet, erfahrungsgemäs, sollten Opera, Safari und Chrome darin übereinstimmer, nur beim IE bin ich unsicher.

//noch etwas Code zum spielen
PHP-Code:
function preloadLinear(imagesonComplete){
    var 
todo images.slice();    //create a copy
    
function loadNext(){
        var 
url todo.shift();
        if(
url
            
img.src url;
        else if(
onComplete && onComplete instanceof Function) 
            
onComplete();
    }
    
    var 
img = new Image();
        
img.onload loadNext;
    
loadNext();        
}

function 
preloadParalell(imagesonComplete){
    function 
imgLoaded(){
        if(--
numLoading == && onComplete && onComplete instanceof Function)
            
onComplete();
    }
    
    for(var 
i=0len=images.lengthnumLoading 0i<len; ++i, ++numLoading){
        var 
img = new Image();
            
img.onload imgLoaded;
            
img.src images[i];
    }
}


preloadLinear([
    
//Google doodle of the Day
    
"http://www.google.de/logos/2011/Diego_Rivera-2011-hp.jpg",
    
"http://www.google.de/logos/2011/Diego_Rivera-2011-hp.jpg",
    
"http://www.google.de/logos/2011/Diego_Rivera-2011-hp.jpg"
], function(){ alert("done"); }); 
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (08-12-2011 um 15:23 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 08-12-2011, 15:30   #6 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
Zitat:
Zitat von thomas_E Beitrag anzeigen
onLoad != onload
ich schnall ab. das wars. oh man, ich hasse JS.

vielen dank thomas!
szylla ist offline   Mit Zitat antworten
Alt 08-12-2011, 15:53   #7 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
Question

noch eine kleine frage... übrigens coole preloader varianten thomas!

wenn das laden beendet ist und ich eine function aufrufe.
und ich zu einem späteren zeitpunkt dann meine bilder brauche. push ich das this im onLoad handler dann in ein array und greiß dann später darauf zu, also so in etwa:
HTML-Code:
img.onload = function() {

   imageHolder.push( this );
   //...
,oder ist das quatsch. weil sich hier ja dann auch das problem ergeben könnte das bild1 vor bild234234 geladen worden ist und somit die reihenfolge im im array imageHolder jedes mal eine andere ist.
edit: ich muss halt sicher stellen das dann in diesem holder array bei index 0 bild 1 kommt, bei index 1 bild 2 usw usw...

oder kann ich dann später einfach egal welches image von denen die gepreloaded worden sind über:
Zitat:
var img1 = new Image();
img1.onload = function() {

ctx.drawImage( this, 0, 0 );

}
img.src = "dsfsdfsf.png"
zeichnen? das onload müsste ja sofort kommen weil das bild ja zuvor schon geladen worden ist?

bitte um aufklärung.
vielen dank und grüße,
szylla

Geändert von szylla (08-12-2011 um 16:01 Uhr)
szylla ist offline   Mit Zitat antworten
Alt 08-12-2011, 16:36   #8 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
ganz so einfach ist das nicht, bei der linearen Variante ist die Reiehenfolge zwar immer korrekt, aber es wird (bisher) auch immer das selbe Image-Objekt verwendet, um die Bilder vorzuladen.
bei der paralellen Variante ist die Reiehnfolge der geladenen Bilder nicht vorhersehbar.

Zitat:
das onload müsste ja sofort kommen weil das bild ja zuvor schon geladen worden ist?
was heisst für dich "sofort"?
mach mal ein trace in dem paralellen Code, einmal nach der for-schleife, und in der onload-Funktion, dann wirst du sehen, dass die komplette Schleife (und vermutlich noch mehr Code) abgearbeitet wurde, bevor das erste onload-Event gefeuert wird, selbst wenn das Bild direkt aus dem Browsercache kommt und somit ja "sofort" da ist.
da geht es zwar nur um milisekunden (die du nicht merkst), aber für den Code kann das eine Ewigkeit sein.

hier die beiden Codes mit image-array:
PHP-Code:
function preloadLinear(urlsonComplete){
    var 
images = [], urls urls.slice();
    function 
loadNext(){
        var 
url urls.shift();
        if(
url){
            var 
img = new Image();
                
img.onload loadNext;
                
img.src url;
            
images.push(img);
        }else if(
onComplete && onComplete instanceof Function) 
            
onComplete(images);
    }
    
    
loadNext();
}

function 
preloadParalell(urlsonComplete){
    var 
images = [];
    function 
imgLoaded(){
        if(--
numLoading == && onComplete && onComplete instanceof Function)
            
onComplete(images);
    }
    for(var 
i=0len=urls.lengthnumLoading 0i<len; ++i, ++numLoading){
        var 
img = new Image();
            
img.onload imgLoaded;
            
img.src urls[i];
        
images.push(img);
    }
}

function 
onImagesLoaded(images){
    var 
"done\n\n";
    for(var 
=0i<images.length; ++i)
        
+= "  "+": "images[i].src +"\n";
        
    
alert(s);
}


preloadLinear([
    
//Google doodle of the Day
    
"http://www.google.de/logos/2011/Diego_Rivera-2011-hp.jpg#001",
    
"http://www.google.de/logos/2011/Diego_Rivera-2011-hp.jpg#002",
    
"http://www.google.de/logos/2011/Diego_Rivera-2011-hp.jpg#003"
], onImagesLoaded); 
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (08-12-2011 um 16:49 Uhr) Grund: loadNext geändert
thomas_E ist offline   Mit Zitat antworten
Alt 08-12-2011, 19:01   #9 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
hi thomas,

hast natürlich recht. das mit sofort war quatsch... das hatte ich nicht ganz bis zu ende gedacht

danke für dein beispiel! schaut sehr vielversprechend aus. ich werds gleich mal antesten.

schönen abend noch!
szylla

edit: funktioniert superb! gekauft.

Geändert von szylla (08-12-2011 um 19:13 Uhr)
szylla ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS4] Preloader für XML Bilder Fabz01 Flash Einsteiger 4 31-08-2009 11:36
[Flash CS4] Preloader und Bilder Aerzte1992 Flash Einsteiger 0 30-06-2009 03:17
Preloader für Bilder? ObergottJango Flash MX 2 09-09-2004 16:36
Bilder preloader llexoduz ActionScript 1 5 25-08-2003 19:42
preloader für bilder allie-tn Flash 4 und Flash 5 3 29-05-2003 13:22


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele