Avatar billede sthen Nybegynder
23. maj 2003 - 01:55 Der er 6 kommentarer og
1 løsning

Langsom ændring i opacity ved OnMouseOver og OnMouseOut

Har følgende kode, som ændrer opacity på billedet ved OnMouseOver og OnMouseOut.

<img src="images/stenfisk.gif" name="fisk" style="filter:alpha(opacity=60);" onmouseover="fisk.filters.alpha.opacity=100" onmouseout="fisk.filters.alpha.opacity=60">

Koden virker i og for sig også fint nok, men...

...jeg kunne godt tænke mig at ændringen i opacity kunne foretages langsommere. Således, at hvor ændringen i øjeblikket sker i samme sekund musen føres over billedet, så ville jeg gerne, om ændringen i opacity tog f.eks. 2 sekunder, og ikke bare en forsinket "udløsning" men en stille og rolig ændring over de f.eks. 2 sekunder.

Nogen forslag, og er det egentlig den rette kategori, eller skal spørgsmålet lægges over i JavaScript i stedet??

/sthen

Tidligere spm:
http://www.eksperten.dk/spm/356099
Avatar billede roenving Novice
23. maj 2003 - 02:12 #1
Prøv med dette -- ikke testet:

<script language="javascript" type="text/javascript">
var OpC = new Array();
var endOpC;

function startOpChange(elm,strt,end,tim){
  if (elm) {
    OpC[0]=strt;
    OpC[1)=end;
    var delayTime = Math.floor(tim*1000/(strt-end));
    OpC[2]=(delayTime<0)?-1:1;
    endOpC=setInterval(opChange(elm),Math.abs(delayTime));
  }
}

function opChange(elm){
  OpC[0]+=OpC[2];
  elm.filters.alpha.opacity=OpC[0];
  if (OpC[0]==OpC[1])
    clearInterval(endOpC);
    return;
  }
}

</script> 

<img src="images/stenfisk.gif" name="fisk" style="filter:alpha(opacity=60);" onmouseover="startOpChange(this,100,60,1)" onmouseout="startOpChange(this,60,100,1)">

hth
jes
Avatar billede sthen Nybegynder
23. maj 2003 - 02:25 #2
Virker desværre ikke.
Opacity ændrer sig ikke, og jeg får også scriptfejl (Du ved det lille gule A nede i hjørnet)
Avatar billede sthen Nybegynder
23. maj 2003 - 02:49 #3
Fandt dette - det virker:

<script>

nereidFadeObjects = new Object();
nereidFadeTimers = new Object();

function nereidFade(object, destOp, rate, delta){
if (!document.all)
return
    if (object != "[object]"){  //do this so I can take a string too
        setTimeout("nereidFade("+object+","+destOp+","+rate+","+delta+")",0);
        return;
    }
       
    clearTimeout(nereidFadeTimers[object.sourceIndex]);
   
    diff = destOp-object.filters.alpha.opacity;
    direction = 1;
    if (object.filters.alpha.opacity > destOp){
        direction = -1;
    }
    delta=Math.min(direction*diff,delta);
    object.filters.alpha.opacity+=direction*delta;

    if (object.filters.alpha.opacity != destOp){
        nereidFadeObjects[object.sourceIndex]=object;
        nereidFadeTimers[object.sourceIndex]=setTimeout("nereidFade(nereidFadeObjects["+object.sourceIndex+"],"+destOp+","+rate+","+delta+")",rate);
    }
}

</script>


<img src="images/stenfisk.gif" name="fisk" style="filter:alpha(opacity=60);"  onmouseover="nereidFade(this,100,50,5)" onmouseout="nereidFade(this,60,60,5)">
Avatar billede roenving Novice
23. maj 2003 - 03:27 #4
Det'r bare i orden .-)
Avatar billede roenving Novice
23. maj 2003 - 13:18 #5
-- og jeg fandt -- med inspiration hos: http://www.dynamicdrive.com/dynamicindex4/highlightgrad2.htm hvor du fandt din nereidFade -- også ud af det:

<head>

<title>Opacity</title>


<script language="javascript" type="text/javascript">
var OpC = new Array();
var endOpC = new Object();

function startOpChange(elm,strt,end,tim){
if (!document.all)return;
  if (strt!=end){
    OpC[0]=strt;
    OpC[1]=end;
    OpC[2]=(strt<end)?1:-1;
    var delayTime = Math.floor((tim*1000)/Math.abs((strt-end)));
    alert(delayTime+"\n"+OpC[0]+" "+OpC[1]+" "+OpC[2]);
    endOpC[0]=setInterval("opChange("+elm.sourceIndex+")",delayTime);
  }
}

function opChange(elm){
  OpC[0]+=OpC[2];
  document.all[elm].filters.alpha.opacity=OpC[0];
  if (OpC[0]==OpC[1]){
    clearInterval(endOpC[0]);
    return;
  }
}

</script> 



</head>

<body onresize onload>
<form>
<img src="eksperten_logo_new.gif" name="fisk" style="filter:alpha(opacity=60);"
onMouseOver="startOpChange(this,60,100,1);"
onMouseOut="startOpChange(this,100,60,1);">
</form>


</body>

</html>
Avatar billede doggy82 Praktikant
23. maj 2003 - 13:19 #6
Avatar billede roenving Novice
23. maj 2003 - 13:33 #7
-- den er ikke dårlig ,-)

-- men jeg kan nu bedre lide min egen fade-in/fade-out -- det er lisom rarere !-)
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