Avatar billede rane Nybegynder
01. november 2007 - 09:11 Der er 29 kommentarer og
1 løsning

Fadeout i IE og Firefox

Er der en der kan hjælpe mig med et fadeout script på et div-lag, der også virker i Firefox?

Jeg forestiller mig at når siden loader...så er der en div-box med tekstindhold og baggrundsfarve..og efter x antal sekunder skal denne boks så fade helt ud. Har tidligere søgt på eksperten men kun fundet et script der virkede i IE og ikke Firefox.

Anyone? :)
Avatar billede soerenlyn Nybegynder
01. november 2007 - 12:37 #1
Jeg har lavet dette script som virker i IE, FF, Seamonkey, Netscape, Safari og Opera hvert fald :)

opacity=0;
var box=....dit element...
function Fade(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity+=2;
    if(opacity<=60){setTimeout("Fade()",2)}
}

Opacity er standard 0 - det vil sige at elementet ikke kan ses.
Der hvor der står 60 er opacity når elementet skal stoppe - skriv 100 hvis det skal ses helt.

"opacity+=2" angiver hvor meget opacity skal stige hver gang.
2-tallet i Timeputen angiver hvor lang tid der er mellem hvert "fade".

Håber du kan bruge det :)
Avatar billede rane Nybegynder
01. november 2007 - 12:54 #2
Takker for svar :)

Dvs. jeg kan ændre opacity=0 til 100 så det er synligt fra starten..og så ændre 60 til 0, så den fader HELT ud?

Hvordan kalder jeg bedst box-elementet? (div'en...dvs. box= ?)
Avatar billede soerenlyn Nybegynder
01. november 2007 - 12:55 #3
Ja det er rigtigt ..

Du giver div et id <div id="box"> fx ..
og så siger:

var box=document.getElementById("box");
Avatar billede rane Nybegynder
01. november 2007 - 13:06 #4
Synes ik helt jeg kan få det til at spille:

<script type="text/javascript">
      opacity=40;
var box= document.getElementById("box");
function Fade(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity+=2;
    if(opacity<=0){setTimeout("Fade()",2)}
}
    </script>
</head>

<body onload="java script:Fade();">
<div id="box" style="background-color: #dce5d0;  font-weight: bold; font-family: arial; color: #447509;"><sdgsdg sdg sdg sdg sd</div>
Avatar billede soerenlyn Nybegynder
01. november 2007 - 13:12 #5
I og med du har ændret 100 til 0, så du også lige ændre <= til >= :)
Avatar billede rane Nybegynder
01. november 2007 - 13:14 #6
Det ændrede ikke noget. Hvis jeg ændrer den første opacity værdi til 20 eksempelvis...så blir den heller ikke 20% transparent onload...så der går den galt :/
Avatar billede soerenlyn Nybegynder
01. november 2007 - 13:20 #7
Hvad er det helt præcist at der skal ske? Skal den kunne ses fra start og hvornår skal den slutte?
Avatar billede rane Nybegynder
01. november 2007 - 13:27 #8
Ja, når siden loader skal div'en vises 100%. Og så skal den fade ud lige så stille og efter x antal sekunder skal den være helt væk.

Seføli en bonus hvis den kan starte med at fade ind..og derefter ud igen efter x antal sekunder :)
Avatar billede soerenlyn Nybegynder
01. november 2007 - 13:38 #9
<script type="text/javascript">
var opacity=100;
var box=document.getElementById("box");
function Fade(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity-=2;
    if(opacity>=0){setTimeout("Fade()",2)}
}
</script>

Sådan burde virker..
Avatar billede soerenlyn Nybegynder
01. november 2007 - 13:41 #10
var opacity=0;
var box=document.getElementById("box");
function FadeIn(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity+=2;
    if(opacity<=100){setTimeout("FadeIn()",2)}
    else{setTimeout("FadeOut()",5000)}
}

function FadeOut(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity-=2;
    if(opacity>=100){setTimeout("FadeOut()",2)}
}
window.onload=function(){FadeIn();}

Dette burde først fade ind og så ud igen. Der hvor der står 5000 betyder at den venter 5 sekunder før den begynder at fade ud igen ..
Avatar billede soerenlyn Nybegynder
01. november 2007 - 13:42 #11
Rettelse i FadeOut:    if(opacity>=0){setTimeout("FadeOut()",2)}
Avatar billede rane Nybegynder
01. november 2007 - 13:47 #12
Jeg må indrømme at koden ser rigtig og fin ud...men jeg kan bare ikke få den til hverken at fade in eller ud i IE6 og Firefox :/
Avatar billede w13 Novice
01. november 2007 - 13:49 #13
Prøv at smide din kode.
Avatar billede rane Nybegynder
01. november 2007 - 13:56 #14
Her er hele koden:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<title>Untitled</title>
<script type="text/javascript">
var opacity=0;
var box=document.getElementById("noget");
function FadeIn(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity+=2;
    if(opacity<=100){setTimeout("FadeIn()",2)}
    else{setTimeout("FadeOut()",5000)}
}
function FadeOut(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity-=2;
    if(opacity>=100){setTimeout("FadeOut()",2)}
}
window.onload=function(){FadeIn();}
</script>
</head>

<body>
<div id="noget" style="background-color: #dce5d0;  font-weight: bold; font-family: arial; color: #447509;">sdgsdg sdg sdg sdg sd</div>

</body>
</html>
Avatar billede w13 Novice
01. november 2007 - 14:06 #15
Jeg tror måske, det er fordi du definerer box inden div'en rent faktisk eksisterer i dokumentet. Prøv sådan her:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<title>Untitled</title>
<script type="text/javascript">
var opacity=0;
function FadeIn(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity+=2;
    if(opacity<=100){setTimeout("FadeIn()",2)}
    else{setTimeout("FadeOut()",5000)}
}
function FadeOut(){
    box.style.filter="alpha(opacity="+opacity+")";
    box.style.MozOpacity=opacity/100;
    box.style.opacity=opacity/100;
    box.style.Opacity=opacity/100;
    opacity-=2;
    if(opacity>=100){setTimeout("FadeOut()",2)}
}
window.onload=function(){var box=document.getElementById("noget");FadeIn();}
</script>
</head>

<body>
<div id="noget" style="background-color: #dce5d0;  font-weight: bold; font-family: arial; color: #447509;">sdgsdg sdg sdg sdg sd</div>

</body>
</html>
Avatar billede rane Nybegynder
01. november 2007 - 14:10 #16
Det havde ikke nogen effekt, så vidt jeg kan se. Det var da mærkeligt.....
Avatar billede soerenlyn Nybegynder
01. november 2007 - 14:20 #17
Det er meget underligt - jeg bruger den selv samme kode og det virker fint. Jeg kan umiddelbart ikke se hvad der skulle gå galt ..
Avatar billede rane Nybegynder
01. november 2007 - 15:05 #18
Jeg har fået at vide at der er en Object required fejl i denne linje i FadeIn:

box.style.filter="alpha(opacity="+opacity+")";
Avatar billede soerenlyn Nybegynder
01. november 2007 - 16:43 #19
Det tyder på at den måske ikke ved hvilket element box er. Men så plejer den at sige "'box' er null eller ikke et object" mener jeg ..
Avatar billede roenving Novice
01. november 2007 - 17:12 #20
Prøv at kigge på http://roenving.users.whitehat.dk/WD5Opacity.html ...

Der er brugt billeder og mouseovers, men det virker for alle typer elementer, der har en fysisk repræsentation og ved alle events, også dem, du selv definerer !-)
Avatar billede rane Nybegynder
07. november 2007 - 16:02 #21
roenving, men du skriver i din kode at man ikke må røre ved "this"...det blir man næsten nødt til hvis den skal fade et bestemt element ud ved websidens onload?
Avatar billede roenving Novice
09. november 2007 - 00:51 #22
Ja, teksten er beregnet til det konkrete tilfælde, så ved onload skal du benytte f.eks. document.getElementById("elementId") i stedet for this !-)
Avatar billede rane Nybegynder
13. november 2007 - 15:14 #23
Hvor går det lige galt henne?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<title>Untitled</title>

<script language="javascript" type="text/javascript">

var OpC = new Array();
var ie,moz,css3; function startOpChange(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>
</head>

<body o nload="startOpChange(document.getElementById('test'),0,1);">

<div id="test" style="background-color: Green; color: White; padding: 10px;filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9;" onmouseover="startOpChange(document.getElementById('test'),20,1);">sdafsdgsd gsdg sd gsd gsd gsd </div>

</body>
</html>
Avatar billede rane Nybegynder
13. november 2007 - 15:16 #24
Den virker pudsigt nok i Firefox men ikke i min Internet Explorer 6.0.2900.2180.xpsp_sp2_qfe.070227-2300.

Kan det være min specifikke IE som er udueligt til den slags funktioner?
Avatar billede roenving Novice
15. november 2007 - 02:46 #25
Næhh, det er en spøjs udgave af noget ie-specifikt, nemlig at visse slags style-properties kun kan sættes, hvis elementet har layout, se f.eks. http://www.eksperten.dk/spm/789924#rid6821494 (1. kommentar !-)

-- så du skal lige sætte layout på elementet, f.eks.

<div id="test" style="width:100%;background-color: ...
Avatar billede rane Nybegynder
15. november 2007 - 09:42 #26
Perfekt..det krævede lige en width eller height :)  Du må gerne smide et svar
Avatar billede rane Nybegynder
15. november 2007 - 09:43 #27
Bonus spørgsmål hvis det er ok:

Kan det laves onload så den starter med at fade ind..og derefter så fader ud igen?
Avatar billede roenving Novice
16. november 2007 - 00:05 #28
Tjah, hvis du vil lave koden fra noget ganske generelt til noget meget specifikt kan du da godt ...

-- en hurtig test viser, at beskyttelsen mod at have modstridende aktioner på samme element kræver en del tilretning før det kan virke, men selvfølgelig kan det laves !-)

-- els velbekomme '-)
Avatar billede rane Nybegynder
19. november 2007 - 13:15 #29
Takker for hjælpen. Nøjes med at fade out til at starte med :)
Avatar billede roenving Novice
19. november 2007 - 13:22 #30
-- og tak for point ;~}
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