Avatar billede para7 Nybegynder
04. maj 2008 - 16:39 Der er 19 kommentarer og
1 løsning

Ændre fadingtid på fadeImgInOut script

Kan nogen fortælle mig, hvordan jeg kan forkorte fading in og out tiden i følgende ellers gode fading script:

<script language="javascript" type="text/javascript">
var OpC = new Array();
var ie,moz,css3; function fadeImgInOut(elm,end,tim){
  ie = !!elm.filters;
  moz = elm.style.MozOpacity != undefined;
  css3 = elm.style.opacity != undefined;
  if (!ie && !moz && !css3)return;
  var idx = OpC.length;
  for(var i=0;idx>i;i++){
    if(OpC[i][0]==elm){
      clearInterval(OpC[i][4]);
      idx = i;
      break;
    }
    OpC[idx] = new Array();
  }
  if(idx==0)OpC[idx] = new Array();
 
  if(ie)actOp=elm.filters.alpha.opacity;
  else if(css3)actOp=(elm.style.opacity*100);
  else actOp=(elm.style.MozOpacity*100);
  if (actOp!=end){
    OpC[idx][0]=elm;
    OpC[idx][1]=actOp;
    OpC[idx][2]=end;
    OpC[idx][3]=(end>actOp)?1:-1;
    var delayTime = Math.floor((tim*1000)/Math.abs((actOp-end)));
    OpC[idx][4]=setInterval("opChange("+idx+")",delayTime);
  }
}

function opChange(idx){
  OpC[idx][1]+=OpC[idx][3];
  if (ie)OpC[idx][0].filters.alpha.opacity=OpC[idx][1];
  else if(css3)OpC[idx][0].style.opacity=Math.min(0.99,OpC[idx][1]/100);
  else OpC[idx][0].style.MozOpacity=Math.min(0.99,OpC[idx][1]/100);
  if (OpC[idx][1]==OpC[idx][2]){
    clearInterval(OpC[idx][4]);
    return;
  }
}
</script>
Avatar billede para7 Nybegynder
04. maj 2008 - 16:41 #1
Tiden skal være kortere. Har selv prøvet at ændre uden held.
Avatar billede w13 Novice
04. maj 2008 - 16:44 #2
Det må være, når du kalder funktionen fadeImgInOut(elm,end,tim)
Her skal "tim" være det antal sekunder, der skal gå, tror jeg.

Men i din kode ser man ikke, hvor fadeImgInOut startes, så du bør nok finde det andet sted, hvor det står.
Avatar billede para7 Nybegynder
04. maj 2008 - 18:01 #3
Jeg har prøvet at sætte et tal < eller > 1 ind uden held:

Eksempel på tag på et billede:
OnMouseOver="fadeImgInOut(imgPlaceholder,100,1)"
eller
OnMouseOver="fadeImgInOut(imgPlaceholder,100,0.2)"
eller
OnMouseOver="fadeImgInOut(imgPlaceholder,100,50)"

Tilsyneladende ingen virkning.
Avatar billede para7 Nybegynder
04. maj 2008 - 18:02 #4
Korrektion: Tagget er i et LINK.
Avatar billede w13 Novice
04. maj 2008 - 18:06 #5
Og de 3 onmouseovers giver ingen forskel?
Avatar billede para7 Nybegynder
04. maj 2008 - 18:18 #6
Det var ikke helt korrekt sagt af mig: Et større tal end 1 giver langsommere fade, et mindre tal end 1 giver ingen virkning.
Avatar billede w13 Novice
04. maj 2008 - 18:21 #7
Ah, javel.

Ret linjen:

    var delayTime = Math.floor((tim*1000)/Math.abs((actOp-end)));

til:

    var delayTime = Math.floor((tim)/Math.abs((actOp-end)));

Så vil:

OnMouseOver="fadeImgInOut(imgPlaceholder,100,1)"

gå meget hurtigt.
Når du sætter 1-tallet op vil det gå langsommere.

1 svarer til et millisekund, 1000 svarer til et sekund, osv.
Så det skal nok sættes op til en del mere end 1.
Avatar billede para7 Nybegynder
04. maj 2008 - 18:42 #8
Der skete noget, men kun at jeg skal skrive minimum 100 for at scriptet virker, og så virker det som før, bare med 100 i stedet for 1. Det må kunne sættes til at fade hurtigere.
Avatar billede roenving Novice
05. maj 2008 - 01:25 #9
Da jeg i sin tid lavede scriptet, undrede det mig også meget, at jeg ikke kunne ændre det til mindre tider end omkring 1-2-3 sekunder, og jeg eksperimenterede en del ...

-- jeg tror, at det har noget med den minimumstid, der skal gå fra et kald i javascript til det næste, såvidt jeg (og andre !-) har eksperimenteret os frem til er den allermindste tid imellem to javascript-kald (afhængig af browser !-) omkring 32 ms., hvorfor den eneste måde at gøre det alvorligt anderledes er at bruge større intervaller end 1% ændring, men så skal scriptet bygges anderledes omkring ændringen af opacitet ...

-- i øvrigt undrer funktionsnavnet mig lidt, scriptet er til fri afbenytelse, f.eks. på http://roenving.users.whitehat.dk/WD5Opacity.html, men selve funktionsnavnet er der vel ingen grund til at ændre (og dermed sløre oprindelsen ?-)
Avatar billede roenving Novice
05. maj 2008 - 01:31 #10
-- og de steder, der skal ændres på, tror jeg er:

...
    OpC[idx][2]=end;
    OpC[idx][3]=(end>actOp)?1:-1;//her skal tallet 1 sættes op
    var delayTime = Math.floor((tim*1000)/Math.abs((actOp-end)));
...

...
  else OpC[idx][0].style.MozOpacity=Math.min(0.99,OpC[idx][1]/100);
  if (OpC[idx][1]==OpC[idx][2]){//dette skal nok ændres til >= i stedet for ==
    clearInterval(OpC[idx][4]);
...

-- som sagt har jeg eksperimenteret en del med det for de omkring 5 år siden, og det lykkedes mig ikke dengang at lave en simpel ændring, der virkede, så jeg er ikke sikker !o]
Avatar billede para7 Nybegynder
05. maj 2008 - 07:40 #11
roenving
Tak for det gratis script. Jeg lavede om på navnet for bedre at kunne genkende anvendelsen af scriptet, men det er jo også opacity, det drejer sig om, så jeg har døbt det tilbage igen nu. Respekt for det :)
Avatar billede para7 Nybegynder
05. maj 2008 - 07:58 #12
OpC[idx][3]=(end>actOp)?15:-1; //her er tallet 1 gjoert større for hurtigere fade. Det virker, men kun for fadein.

if (OpC[idx][1]==OpC[idx][2]){ //Her skulle >= skrives i stedet for == for hurtigere fade. Men så virker fade out ikke
Avatar billede roenving Novice
05. maj 2008 - 12:38 #13
Arh ja, det er nok derfor, jeg ikke endte med et fornuftigt resultat ...

-- så skal det jo så en del længere rundt:

OpC[idx][3]=(end>actOp)?15:-15;//begge tal skal ændres !-)

if (OpC[idx][1]>=OpC[idx][2]&&OpC[idx][3]>0 || OpC[idx][1]<=OpC[idx][2]&&OpC[idx][3]<0){
Avatar billede para7 Nybegynder
05. maj 2008 - 16:06 #14
Super. Det dur' Send lige svar roenving.
Avatar billede para7 Nybegynder
05. maj 2008 - 16:08 #15
PS: Nogen der ved hvorfor man nogen gange ikke får sin kommentar gemt. Det skete nu igen. Jeg tager altid lige an ctr+a og ctr+c.
Avatar billede roenving Novice
05. maj 2008 - 16:10 #16
Et gæt er, at en session når at udløbe før der sendes ...

-- men det er diskuteret før uden en afklaring !-)

Velbekomme '-)
Avatar billede para7 Nybegynder
05. maj 2008 - 16:39 #17
Og tak herfra :) Session udløber? Jeg er nu autologget ind. Så det er måske et IE problem.
Avatar billede roenving Novice
05. maj 2008 - 16:39 #18
-- og jeg takker for point ;~}
Avatar billede para7 Nybegynder
06. maj 2008 - 07:50 #19
Og tak for et fedt script :)
Avatar billede para7 Nybegynder
06. maj 2008 - 07:52 #20
Og *<:o) - Ikke en nisse men en wizard...
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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