Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Jim-Y
    veterán

    Próbáltam, ugyanaz.

    Az a baj, hogy nem látom még át hogy mi történik a háttérben, és mi okozza a problémát. Valami időzítési móka lesz, szerintem, de lehet, hogy tévedek.
    Olyan ciklus nincs, ami egy eseményre megy csak tovább? :D
    Esetleg a változónévként működő tömb elemek akadnak össze a ciklus különböző köreiben?
    Lehet, hogy mégsem a indexes megoldást kellene erőltetnem, hanem valami pointeres mókát?
    Vagy az egész kód alapvetően rossz felépítésű? Nem tartom bonyolult dolognak, hogy egy lista alapján képeket töltök be canvas-ba, ezért furcsa, hogy máris ilyenbe ütköztem.

    Szia

    1: ... = Array; Ehelyett inkabb ... = [] az ajanlott. [link]

    2: ne tegyel semmit kulon fuggvenybe, ahogy fordfairlane is irta, a closure nem tartalmazza az i valtozodat, itt egy (ROSSZ) pelda, ez tortenik most a kododban.

    http://jsfiddle.net/Jim_Y/6vy2x7Lo/1/

    Latszik, hogy 10x "10" irodik ki a kepernyore, tehat ha lebontjuk, akkor

    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);

    ...stb tortenik

    Ez azert van, mert az onload fuggveny egy closure-t kepez az ot korulolelo fuggvennyel, ami azt jelenti, hogy amikor az onload fv. lefut, akkor mindig megnezni a runtime, hogy az aktualis kontextusban mi az i valtozo erteke. Mivel az onload aszinkron, ezert amikor azok lefutnak, addigra a ciklus mar vegzett, es az i ciklusvaltozo erteket 10-re novelte. Abban a pillanatban ahogy az onload lookup-olja az i-t, az mar 10-es ertekkel szerepel a kontextusban. Ezert lesz 10x"10" kiirva a konzolra.

    Ennek megoldasa, egy uj Execution Context (~ uj variable environment, ~closure) letrehozasaval orvosolhato, amiben az i valtozo mindig az eppen aktualis ertekre lesz beallitva, igy amikor az onload (lookup i) tortenik, akkor az aktualis environment context-ben az i jo ertekkel fog szerepelni.

    Ket Harom pelda:

    1: http://jsfiddle.net/Jim_Y/6vy2x7Lo/2/ reading Function.prototype.bind
    2: http://jsfiddle.net/Jim_Y/6vy2x7Lo/3/ reading closures
    3: http://jsfiddle.net/Jim_Y/6vy2x7Lo/4/ reading IIFE

    3: Az onload aszinkron muvelet, ami a ciklus lefutasa utan fog csak meghivodni.

    Itt egy szemlelteto pelda http://jsfiddle.net/Jim_Y/LsuLL7dg/1/

    A kodban a setTimeout az onload-ot szemlelteti. Latszik, hogy amit azon kivul csinalsz, az elobb fut le, mint amit azon belul.

    Udv

  • sztanozs
    veterán

    Próbáltam, ugyanaz.

    Az a baj, hogy nem látom még át hogy mi történik a háttérben, és mi okozza a problémát. Valami időzítési móka lesz, szerintem, de lehet, hogy tévedek.
    Olyan ciklus nincs, ami egy eseményre megy csak tovább? :D
    Esetleg a változónévként működő tömb elemek akadnak össze a ciklus különböző köreiben?
    Lehet, hogy mégsem a indexes megoldást kellene erőltetnem, hanem valami pointeres mókát?
    Vagy az egész kód alapvetően rossz felépítésű? Nem tartom bonyolult dolognak, hogy egy lista alapján képeket töltök be canvas-ba, ezért furcsa, hogy máris ilyenbe ütköztem.

    Vsz, nem jó az Image - Stackoverflow-n lőttem: [link]

    Bár eszerint meg mennie kellene... [link]

    Lehet, hogy szét kell szedned két for ciklusba, az egyiken beállítani az összes src-t a másikban meg beállítani az onload-okat...

Új hozzászólás Aktív témák