Avatar billede sho Nybegynder
24. maj 2005 - 21:11 Der er 11 kommentarer og
1 løsning

Fade virker i IE men ikke i Firefox

Nu har jeg brug for hjælp, hvis min side skal være X-browser kompatibel - og det skal den jo! :-)

Jeg har et script, der fader en knap op, når jeg bevæger mig over den og ned igen, når jeg flytter musen igen. Det fungerer perfekt i IE, men i Firefox hænger det lidt.

Jeg kalder scriptet med værdien på, hvad den skal fade fra og til, men i Firefox fader den helt ned til 0 hver gang - og andre gange fader den slet ikke ned igen.

Scriptet (som jeg har lånt af roenving og modificeret lidt, så det fader hurtigere op og ned):


var OpC = new Array();
var ie = (document.all)?true:false;
var moz = (navigator.userAgent.indexOf("Gecko")>-1);

function startOpChange(elm,end,tim){
  if (!ie && !moz)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 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)?4:-2;
    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 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;
  }
}


Og kaldet af det (der bliver hængende på 100 i FF):

<a href="side.html" ><img src="images/knap.gif" width="94" height="20" border="0" style="filter:alpha(opacity=0);-moz-opacity:0.0;" onMouseOver="startOpChange(this,100,0.1);" onMouseOut="startOpChange(this,0,.1);"></a>

eller (der fader helt til 0 i FF):

<a href="#" onclick="document.search.submit();"><img src="images/pil.gif" width="15" height="9" border="0" style="filter:alpha(opacity=60);-moz-opacity:0.6;" onMouseOver="startOpChange(this,100,0.1);" onMouseOut="startOpChange(this,60,.6);"></a>

Jeg har ikke forstand på javascript, så det er sikkert simpelt... for jer! :-)

-Søren
Avatar billede roenving Novice
25. maj 2005 - 00:50 #1
Kan du lægge et link ?-)
Avatar billede sho Nybegynder
25. maj 2005 - 06:38 #2
Undskyld, ja, selvfølgelig - du kan se det på www.clubi.dk :-)

I menupunkterne til venstre skal den fade helt op og helt ned, men hvis du bevæger dig lidt tilfældigt rundt i FF bliver de pludselig hængende.

Og f.eks. i de to ikoner under søgefeltet i samme side skal de fade op fra 60 og ned til 60 igen... de fader helt op, men fader bagefter helt væk.
Avatar billede roenving Novice
25. maj 2005 - 09:22 #3
Det ser godt nok mystikst ud, men jeg tror ikke det direkte har noget med scriptet at gøre, for det ser ud til, at der sker en ekstrem forsinkelse på udførelse af nogle events ...

-- prøv f.eks. at indsætte en span eller div et sted og skriv noget, som identificerer hvilken event, der kalder, i startOpChange !-)
Avatar billede sho Nybegynder
25. maj 2005 - 10:14 #4
Hmm, jeg havde sat min lid til, at du lige løste det uden videre, men på den anden side forklarer det så, hvorfor jeg ikke selv kunne gennemskue det! :-)

Jeg prøver, når jeg kommer hjem i aften, men det undrer mig meget, at det kun sker i FF så, da det jo efter sigende skulle være en hurtigere browser. Der kan vel ikke være så meget tvivl om, hvilken event, der kalder?
Avatar billede sho Nybegynder
25. maj 2005 - 18:43 #5
Nu kom jeg hjem og læste dit svar ordentligt...

> -- prøv f.eks. at indsætte en span eller div
> et sted og skriv noget, som identificerer
> hvilken event, der kalder, i startOpChange !-)

Hvordan mener du, og hvad skulle det vise?
Avatar billede roenving Novice
26. maj 2005 - 12:06 #6
Indsæt et sted på siden, hvor du kan følge med f.eks.

<div id="testDiv"></div>

-- og indsæt så i den første linje af funktionen startOpChange:

function startOpChange( ...
document.getElementById('testDiv').innerHTML += "<br>" + elm.id;//eller .src f.eks.
Avatar billede sho Nybegynder
26. maj 2005 - 20:23 #7
Øh tak, men hvis jeg sætter en <div> om f.eks. den ene knap og bevæger mig over den, får jeg en javafejl om, at Medlemmet ikke findes. .id printer ingenting og .src printer navnet på grafikken.

Blev jeg klogere af det?
Avatar billede roenving Novice
27. maj 2005 - 02:24 #8
Næh, så har du misforstået mig ...

-- til at teste skal du indsætte en div et helt andet sted på siden !-)
Avatar billede sho Nybegynder
27. maj 2005 - 08:49 #9
Hmm :-|

Jeg tænkte på i går, om du har en mail-adresse og tid/lyst til at prøve at teste det hos dig? Problemet får jeg både på min lokale IIS og på min udbyders, så jeg tror, at det har noget at gøre med scriptet...

Evt. at jeg har ændret på den hastighed, som den fader op og ned med? Sad og testede lidt på det i går, og hvad jeg lader indstillingerne være som i dit originale script, så ser det ud til at køre fint?!?
Avatar billede roenving Novice
27. maj 2005 - 10:04 #10
-- i hvert fald har jeg selv pillet utroligt meget i scriptet og har ikke fundet en ordentlig løsning på at kunne ændre hastigheden, og det tilskriver jeg javascript-arkitekturen, som jo så åbenbart er uhensigtsmæssig ,-(

-- men min mail-adresse skulle ikke være så svær at finde, endskønt den er en anelse scramblet i min brugerprofil !-)
Avatar billede sho Nybegynder
30. maj 2005 - 18:48 #11
Jeg sendte en mail til dig i weekenden, som du forhåbentlig har fået?
Avatar billede sho Nybegynder
05. juni 2005 - 13:55 #12
Så har jeg fået rettet scriptet til af en bekendt med forstand på javascript, så jeg lukker spørgsmålet. Nu fungerer det nøjagtig som det skal i begge browsere! ;-)
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