Avatar billede bentjuul Nybegynder
09. maj 2005 - 20:13 Der er 20 kommentarer og
1 løsning

Fejl i diasshow

Jeg har forsøgt at lave et diasshow ved hjælp af Pyromans slideshow guide artikel, men har det problem at det kun er det første billede som vises ud af 4 billeder - her er koden som den skulle være ifølge artiklen. Desværre kan jeg ikke actionscript nok til selv at rette det. Scriptet er lagt i første frame i MC.

speed = 10;
path = "images/";
interval = 3000;
automatic = true;
this.loadImages = function(num) {
    this.maxNum = num;
    this._visible = false;
    for (i=1; i<=num; i++) {
        this.createEmptyMovieClip("img"+i, i);
        this["img"+i].loadMovie(path+i+".jpg");
    }
    this.onEnterFrame = function() {
        loadedBytes = 0;
        totalBytes = 0;
        gotTotal = true;
        for (i=1; i<=num; i++) {
            loadedBytes += this["img"+i].getBytesLoaded();
            totalBytes += this["img"+i].getBytesTotal();
            if (this["img"+i].getBytesTotal()<1) {
                gotTotal = false;
                }
            }
            if (loadedBytes == totalBytes && gotTotal) {
                delete this.onEnterFrame;
                for (i=1; i<=num; i++) {
                    this["img"+i]._alpha = 0;
                    this["img"+i]._visible = false;
                }           
                this._visible = true;
                this.lastNum = 0;
                this.currentNum = 0;
                showImage(1);
            }
    };
};
this.showImage = function(num){
    this["img"+lastNum]._alpha = 0;
    this["img"+lastNum]._visible = false;
    this.lastNum = currentNum;
    if(num > this.maxNum){
            this.currentNum = 1;
    }else if(num < 1){       
            this.currentNum = this.maxNum;
    }else{
            this.currentNum = num;
    }
    this["img"+currentNum]._visible = true;
    this["img"+currentNum]._alpha = 0;
    this["img"+lastNum]._alpha = 100;
    this.onEnterFrame = function(){
            this["img"+currentNum]._alpha += speed;
            this["img"+lastNum]._alpha -= speed;
            if(this["img"+currentNum]._alpha >= 100){
                delete this.onEnterFrame;
                if(automatic){
                    slideshowTimer = setInterval(doSlideshow, interval);
                }           
                this["img"+lastNum]._visible = false;
            }
    }
}
this.doSlideShow = function(){
    clearInterval(slideshowTimer);
    showImage(currentNum+1);
                        }
loadImages(4);

//bentjuul
Avatar billede stefanfuglsang Juniormester
09. maj 2005 - 20:47 #1
Kan ikke helt gennemskue det, men det forekommer mig at "num" ikke er
defineret i for-løkken i this.onEnterFrame
Avatar billede bentjuul Nybegynder
09. maj 2005 - 22:49 #2
Har du et forslag til en evt. løsning, jeg kan ikke lige få øje på en. Prøv evt. at se artiklen her http://www.eksperten.dk/artikler/236

//bentjuul
Avatar billede paal_dk Nybegynder
10. maj 2005 - 00:38 #3
Prøv den her (laver præcis det samme... :-) P.t er det sat til at vise 1.jpg ... 4.jpg i ring). Stil speed på tween klassen (sidste parameter) og pausen i intervallet efter behov:

import mx.transitions.*;
createEmptyMovieClip("a",1); a._alpha=0;
createEmptyMovieClip("b",2); b._alpha=0;
(f=function(){
  clearInterval(i);
  p=(c==a?b:a); (m=new MovieClipLoader()).loadClip("./"+((i=++i%5)||(i=1))+".jpg",p);
  m.onLoadComplete=function(){
      new Tween(c,"_alpha",0,100,0,40);
      t=new Tween(c=p,"_alpha",0,0,100,40);
      t.onMotionFinished = function() {
        i=setInterval(f, 3000);
      }
  }
}).call();

Mvh,
Pål Østerud
Avatar billede bentjuul Nybegynder
10. maj 2005 - 01:37 #4
Genialt, det virker perfekt mange tak for det.

Læg venligst et svar.

//bentjuul
Avatar billede paal_dk Nybegynder
10. maj 2005 - 11:17 #5
Velbekomme. Jeg skrev det kompakt, derfor den noget specielle syntaks, og det gik lidt hurtigt. Spottede en fejl: i bliver overskrevet. Her er en korrekt (og kortere version):

import mx.transitions.*;
createEmptyMovieClip("a",1); a._alpha=0;
createEmptyMovieClip("b",2); b._alpha=0;
(f=function(){
  clearInterval(i); p=(c==a?b:a);
    (m=new MovieClipLoader()).loadClip("./"+((n=++n%5)||(n=1))+".jpg",p);
    m.onLoadComplete=function(){
      new Tween(c,"_alpha",0,100,0,40);
      Object(new Tween(c=p,"_alpha",0,0,100,40)).onMotionFinished = function() {
        i=setInterval(f, 3000);
      }
  }
}).call();
Avatar billede bentjuul Nybegynder
10. maj 2005 - 11:30 #6
Tak endnu engang Pål Østerud - kunne du kommentere den første linie i scriptet en smule.

//bentjuul
Avatar billede paal_dk Nybegynder
10. maj 2005 - 12:23 #7
import mx.transitions.*; Lader dig bruge Tween klassen uden at skulle skrive
var a=new mx.transitions.Tween( ... ) hver gang.

Google på "actionscript macromedia tween" - næsten alle links er gode. Marker "import" i flash og tryk F1 for en forklaring på hvad den gør.

Pål
Avatar billede bentjuul Nybegynder
10. maj 2005 - 12:59 #8
Tak for det Pål og fortsat god dag.

//bentjuul
Avatar billede mikaelo Nybegynder
07. august 2005 - 15:25 #9
ok, nu har jeg fået det hele til at køre perfekt, ingenting der. Super;)
MEN; jeg vil i midlertidigt gerne ha en stop/pause knap ind. (og en start/forsæt knap egentlig også) Hvordan gør jeg det!?

Normalt er det easy fix, men nu hvor der ikke er nogen "fysiske frames" i filmen, kan jeg ikke helt greje den. Nogen der har en løsning på det?
Avatar billede rundt_om Nybegynder
04. september 2005 - 23:49 #10
Hej.

Er det muligt at lave dette script, så antallet af billeder bliver bestemt ud fra en variabel? Jeg skal nemlig gerne kunne have et varierende antal billeder og så kunne det jo være smart hvis den selv kunne hente dette antal ind, evt. via en ekstern fil, eller lignende.
Avatar billede paal_dk Nybegynder
05. september 2005 - 11:04 #11
Ja, bare erstat
(n=++n%5)||(n=1)
med
(n=++n%DIN_VARIABEL)||(n=1)

og iøvrigt er DIN_VARIABEL = ANTAL_BILLEDER+1

Mvh,
Pål
Avatar billede rundt_om Nybegynder
05. september 2005 - 11:35 #12
Ok, fedt :)

Hvordan henter jeg variablen fra min asp-side (som flashen vises på) ind ?
Avatar billede bentjuul Nybegynder
05. september 2005 - 11:48 #13
Hvor er det dejligt at se min tråd udvikle sig med nye brugbare input, tak skal i have allesammen for det. Er nu væk i nogle dage, men glæder mig allerede til at se hvad i yderligere har fundet ud af.

//bentjuul
Avatar billede paal_dk Nybegynder
05. september 2005 - 15:52 #14
> Hvordan henter jeg variablen fra min asp-side (som flashen vises på) ind ?
Der er mange måder, men hvis det er en ASP side som flashen vises på, er det nemmeste at embedde variablen i querystrengen til .swf filen:

dias.swf?DIN_VARIABEL=<%= DIN_ASP_VARIABEL %>

inde i actionscript kan du så hente værdien her:
_root.DIN_VARIABEL

Mvh,
Pål
Avatar billede rundt_om Nybegynder
05. september 2005 - 21:45 #15
Perfekt! -mange tak for hjælpen!

Er det muligt at hente flere variabler ind samtidigt, på denne måde?

Jeg skal nemlig også gerne lave et trick, som jeg har læst herinde (), der gerne skulle forhindre at swf-filen bliver hentet fra cachen, men derimod bliver loadet hver gang.

http://eksperten.dk/spm/241306  (06/08-2002 17:57:23)

-det må være en af de mest irreterende ting ved flash!!!! -jeg har nu efterhånden prøvet alle smarte løsninger på dette, men INTET virker... jeg får simpelthen ikke en ny "frisk" version af min swf-fil før jeg selv manuelt har slettet alle temp. internet files...
Avatar billede paal_dk Nybegynder
06. september 2005 - 12:46 #16
1. Brug *mozilla firefox* når du tester, den er mindre hardcore cachemæssigt.
2. Du kan sætte din IIS/Apache op til at sende nocache med i HTTP headeren på requests. Spørg mig ikke hvordan.
3. Lad være med at bruge en proxy server
4. Det eneste du ellers kan gøre er at sætte et cachebuster tag ind:
dias.swf?DIN_VARIABEL=<%= DIN_ASP_VARIABEL %>&nocache=<%= VERSION_NUMBER %>

Hver gang du uploader en ny version, skal VERSION_NUMBER opdateres. Læg det i en serverside include fil.

Hvis du ikke gider opdatere med versionsnumre så bare brug et random nummer. Det er bare ikke pænt overfor brugerne at de ikke må bruge deres cache.

/Pål
Avatar billede rundt_om Nybegynder
06. september 2005 - 22:47 #17
Hej igen.

Det virker skide godt, endelig... jeg har lavet en ekstern variabel der bestemmer antal billeder og så en der bestemmer hastighed. -når jeg ændrer disse og trykker F5, så bliver de opdateret uden problemer.

men hvis jeg nu har skiftet mine billeder (1.jpg 2.jpg osv. osv.), så bliver de nye billeder ikke vist, før jeg har slettet temp. internet files... :) så det er som om at selve flash-filmen bliver opdateret, men de billeder den henter ind gør ikke.

Men kæmpe tak for hjælpen Pål!!! Jeg har oprettet det her spørgsmål:

http://www.eksperten.dk/spm/645128

-men har fået løst min opgave (på en lidt anden, men godkendt måde) igennem den her tråd... så hvis du svarer er der point til dig. -du må gerne komme med et kvalificeret svar på mit sidste problem, hvis du har et :)
Avatar billede paal_dk Nybegynder
07. september 2005 - 09:40 #18
>men hvis jeg nu har skiftet mine billeder (1.jpg 2.jpg osv. osv.), så bliver de nye >billeder ikke vist, før jeg har slettet temp. internet files... :) så det er som om at >selve flash-filmen bliver opdateret, men de billeder den henter ind gør ikke.

Nå det lyder da lidt mærkeligt (bruger du mozilla som jeg bad dig om?). Et hurtigt fix så du ikke bruger tid på det er endnu en cachebuster i actionscripten:

".jpg"
erstattes med
".jpg?nocache="+nRandNo

nRandNo skal selvf. erklæres i starten.
/Pål
Avatar billede rundt_om Nybegynder
07. september 2005 - 10:31 #19
Ok, jeg takker endnu en gang :)

Ang. Firefox, så er det vel ligegyldigt hvad jeg tester i?
-den skal jo alligevel virke i IE, da det jo er den suverænt mest brugte browser.
Avatar billede paal_dk Nybegynder
07. september 2005 - 11:02 #20
Jeg bruger firefox til test fordi når man udvikler er det vigtigt at cachen hele tiden er opdateret. Når tingene er som de skal være, kan man eventuelt specialoptimere til IE. Det er sjældent at slutbrugerne har brug for en site der aldrig er cachet fordi gevinsten ved et hurtigt load hver gang er større end at de har de opdaterede filer det sekund de er ændret (og forskellen er som regel ikke mere end et par timer i IE efter en opdatering), kommer an på hvad webserveren er sat op til.
Avatar billede cgleerup Nybegynder
18. november 2007 - 17:04 #21
Genial kode til at hente billederne ind, men hvis man nu gerne vil have et overlay på billederne, eksempempelvis et logo, hvordan grejer man så den? - jeg kan ikke rigtig få det til at spille?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester