Avatar billede para7 Nybegynder
17. oktober 2008 - 11:09 Der er 54 kommentarer og
1 løsning

Layer skal fade og skjules ved klik

Jeg har et godt script til at fade et layer med. da det er til en intro, der skal dække mens siden loader bagved, skal den når den er faded også gøres hidden, ellers kan man ikke klikke på noget.

Nogen der kan tilføje det til mit script eller lave et nyt lignende?

<script type="text/javascript">
<!--
function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}
//-->
</script>

<div id="NedtoningLayer" style="visibility:visible; position:absolute; z-index:40; width:100%;height:100%; background-color:gray; filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9'"
onClick="opacity('NedtoningLayer',  90, 0, 500)">
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="2"><tr><td align="center" valign="middle">
<div style="width:500px;height:300px; border:1px solid black; background-color:#cccccc; cursor:pointer">
Her kommer flash intro
</div>
</td></tr></table>
</div>
Avatar billede para7 Nybegynder
17. oktober 2008 - 11:12 #1
Jeg vil også i stedet eller i tillæg gerne have at layeret sættes hidden efter fx 3 sekunder.
Avatar billede olebole Juniormester
17. oktober 2008 - 11:19 #2
<ole>

Du spørger vel bare på opacity'en i changeOpac:

object.style.display = opacity<=0 ? "none" : "block";

/mvh
</bole>
Avatar billede para7 Nybegynder
17. oktober 2008 - 17:30 #3
Jeg skal bare have layeret til at komme af vejen, så man kan betjene siden og dens knapper og links. Det med opacity er jo ikke lige nok efter mine tests. Ved opacity=0 blokerer layeret stadig. En ide kunne måske også være at andre z-index til 0 for layeret, så vil det vel ligge under alt andet?
Avatar billede para7 Nybegynder
17. oktober 2008 - 17:32 #4
Det kan til nød vel også være det lidt skøre at layeret får top:-10000px ;)
Avatar billede para7 Nybegynder
17. oktober 2008 - 17:38 #5
Med dette til slut i scriptet, blokerer layeret stadig, så det skal lissom skaffes af vejen:
object.style.display = opacity<=0 ? "none" : "block";
Avatar billede para7 Nybegynder
17. oktober 2008 - 17:41 #6
Ja, hvad ved jeg om js ;) jeg prøvede dette og det værkede ikke:
object.style.display = visibility:hidden;
Avatar billede para7 Nybegynder
17. oktober 2008 - 17:45 #7
object.style.display = "visibility:hidden";
heller ikke...
Avatar billede w13 Novice
17. oktober 2008 - 18:16 #8
Det skal være:

object.style.display = "none";
Avatar billede para7 Nybegynder
18. oktober 2008 - 10:15 #9
Jeg har sat det ind i slutningen af scriptet som her, men det virker ikke. Kan du ikke sev lige prøve det af?

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
    object.style.display = "none";
}
//-->
</script>
Avatar billede roenving Novice
18. oktober 2008 - 10:31 #10
Små og store fejl:

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    if(object.filters)
      objectfilter.alpha.opacity=opacity;
    object.display = opacity<=0 ? "none" : "block";
}
</script>
Avatar billede w13 Novice
18. oktober 2008 - 10:54 #11
Skal:
  objectfilter.alpha.opacity=opacity;
ikke være:
  objectfilter.alpha.opacity=opacity;
?
Avatar billede w13 Novice
18. oktober 2008 - 10:54 #12
Hov, være:
  object.filter.alpha.opacity=opacity;
Avatar billede para7 Nybegynder
18. oktober 2008 - 11:00 #13
Tak roenving, det begynder at ligne noget. MEN siden bagved layeret bliver synlig efter et et til to sekunder UDEN fade effekten.
Avatar billede para7 Nybegynder
18. oktober 2008 - 11:03 #14
Ja men stadig ingen fade effekt.
Avatar billede roenving Novice
18. oktober 2008 - 11:09 #15
>>w13

Selvfølgelig !-)
Avatar billede para7 Nybegynder
18. oktober 2008 - 11:37 #16
Jammen det er altså en selvfølge for mig at der er fade effekt. Men hvis det er UMULIGT, så må jeg leve med det ?-S .... Så skal scriptet da bare forenkles.
Avatar billede w13 Novice
18. oktober 2008 - 11:41 #17
Er der noget af det, der fader, eller er der intet, der fader?
Avatar billede para7 Nybegynder
18. oktober 2008 - 11:49 #18
Intet fader. Men med al respekt, er det ikke lettere lige at smide koderne ind i en html fil og køre det, i stedet for at gætte om kodeforslagene virker?
Avatar billede para7 Nybegynder
18. oktober 2008 - 11:52 #19
Men hov, i min FireFox fader det, dog lidt klodset. I min IE fader det ikke.
Avatar billede w13 Novice
18. oktober 2008 - 11:54 #20
Hvis nu vores gætterier løste problemet efter et par gæt, så ville det være hurtigere end at skulle sidde og rode med det selv. (Og når man ikke kan få det til at virke, bliver det et irritationsmoment og pludselig har man brugt en time på at prøve at løse problemet, selvom man burde bruge sin weekend på alle mulige andre ting. =)

Men hvis vi skal teste det selv, skal vi lige bruge den præcise kode, som den ser ud nu, efter vores rettelser. Så er vi sikre på, vi ser det samme.
Avatar billede w13 Novice
18. oktober 2008 - 11:54 #21
Kunne lyde, som om, if(object.filters) ikke fungerer. Prøv lige at fjerne den linje og forsøg igen i IE.
Avatar billede para7 Nybegynder
18. oktober 2008 - 11:54 #22
I min Chrome fader det, men der er ingen opacity til at starte med.
Avatar billede para7 Nybegynder
18. oktober 2008 - 11:56 #23
at fjerne if(object.filters) linjen giver fejl.
Avatar billede w13 Novice
18. oktober 2008 - 11:56 #24
Hvis den ikke er fadet til start, så er det jo i din CSS, den er gal, dvs. her:

style="visibility:visible; position:absolute; z-index:40; width:100%;height:100%; background-color:gray; filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9'"

hvor den mangler den form for opacity, som chrome åbenbart bruger. Det eneste, som for mig ser ud til at mangle, er khtml-opacity.
Avatar billede w13 Novice
18. oktober 2008 - 11:56 #25
Ok? Og hvilken? :)
Avatar billede w13 Novice
18. oktober 2008 - 12:01 #26
Hov, mente "hvilken fejlmeddelelse"?

Som du selv siger, er det lettere end at gætte, hvis man i stedet får at vide af browseren, præcis hvad der er galt. =)
Avatar billede para7 Nybegynder
18. oktober 2008 - 12:06 #27
Værsgo og leg med det, det tager vel ikke mere end et par minutter at løse det når en javascript haj selv sidder med det :)

<script type="text/javascript">
<!--
function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    if(object.filters)
      object.filter.alpha.opacity=opacity;
    object.display = opacity<=0 ? "none" : "block";
}
//-->
</script>

<div id="NedtoningLayer" style="visibility:visible; position:absolute; z-index:40; width:100%;height:100%; background-color:gray; filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9'"
onClick="opacity('NedtoningLayer',  90, 0, 500)">
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="2" ID="Table1"><tr><td align="center" valign="middle">
<div style="width:500px;height:300px; border:1px solid black; background-color:#cccccc; cursor:pointer">
Her kommer flash intro
</div>
</td></tr></table>
</div>

Her er et <a href="test.htm">link</a> bag layeret.
Avatar billede para7 Nybegynder
18. oktober 2008 - 12:08 #28
Altså, det mangler bare at kunne fade i IE, tak for hjælpen so far..
Avatar billede w13 Novice
18. oktober 2008 - 12:09 #29
Ahr, pokkers. Jeg sidder på en Mac, i min Windows PC vil pludselig have "aktiveret Vista", inden jeg kan bruge den til noget... Og hotline er der selvfølgelig først mandag... Så det bliver nok ikke før da, hvis jeg skal hjælpe. =)

Hvilken fejlmeddelelse fik du før i IE, da du fjernede den if?
Avatar billede para7 Nybegynder
18. oktober 2008 - 12:11 #30
filter.alpha er nul eller ikke et objekt
Avatar billede para7 Nybegynder
18. oktober 2008 - 12:14 #31
Det der khtml-opacity. hvor skal vi putte det ind og hvordan?
Avatar billede w13 Novice
18. oktober 2008 - 12:14 #32
Hvis du så retter den linje tilbage til:

object.filter = "alpha(opacity=" + opacity + ")";
Avatar billede w13 Novice
18. oktober 2008 - 12:16 #33
Prøv at se i style:

style="visibility:visible; position:absolute; z-index:40; width:100%;height:100%; background-color:gray; filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9'"

Det andet sidste tegn er en apostrof, hvilket sagtens kan fucke et eller andet op i Chrome.

Så ret lige til:

style="visibility:visible; position:absolute; z-index:40; width:100%;height:100%; background-color:gray; filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9"

Og med khtml:

style="visibility:visible; position:absolute; z-index:40; width:100%;height:100%; background-color:gray; filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9;-khtml-opacity:0.9"
Avatar billede para7 Nybegynder
18. oktober 2008 - 12:33 #34
Super! En overset apostrof, ja nu er der opacity i Chrome.
;-khtml-opacity:0.9 kan jeg ikke se ændrer noget i nogen af de tre browsere? Hvad skal det gøre?
Avatar billede para7 Nybegynder
18. oktober 2008 - 12:34 #35
Googling siger:
It's supported in Safari (from version 1.1 apparently).
Avatar billede roenving Novice
18. oktober 2008 - 13:04 #36
Argh, det skal jo hedde:

if(document.getElementById(id).filters))
  object.filter.alpha.opacity=opacity;

-- da filters er en IE-only attribut på selve elementet, og det er nødvendigt at spørge på den for at undgå fejl i nogle andre browsere !-)
Avatar billede w13 Novice
18. oktober 2008 - 13:13 #37
Jeg tror også, Khtml er en lidt ældre, ikke længere i brug, metode. Vistnok til Konqueror-browseren?

Men godt, det virker. (Safari supporterer jo også flere af de andre værdier, så jeg tror ikke, Khtml behøves.)
Avatar billede roenving Novice
18. oktober 2008 - 13:20 #38
Jepz, khtml-tingene er til Konqueror, men jeg tror faktisk Safari delvist bygger på den !-)

-- og jeg gætter på, at Mac-folket er endnu mere konservative end Windows-folket, så der skal nok sidde nogle Konqueror-bugere derude stadigvæk !o]
Avatar billede para7 Nybegynder
18. oktober 2008 - 13:20 #39
OK ,en det her giver fejlen et objekt var ventet:

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    if(document.getElementById(id).filters))
    object.filter.alpha.opacity=opacity;
    object.display = opacity<=0 ? "none" : "block";
}
//-->
</script>
Avatar billede w13 Novice
18. oktober 2008 - 13:28 #40
Hvilken af linjerne?
Avatar billede roenving Novice
18. oktober 2008 - 13:33 #41
Ups, der er jo to slut-paranteser:

    object.KhtmlOpacity = (opacity / 100);
    if(document.getElementById(id).filters)
        object.filter.alpha.opacity=opacity;
    object.display = opacity<=0 ? "none" : "block";
Avatar billede para7 Nybegynder
18. oktober 2008 - 13:50 #42
Hvad skal jeg prøve med så?
Avatar billede w13 Novice
18. oktober 2008 - 17:29 #43
Den kode, Roenving skriver skal du indsætte i stedet for den tilsvarende del nu. Han har bare fjernet det ene af de to parenteser efter "filters".
Avatar billede para7 Nybegynder
18. oktober 2008 - 18:04 #44
Det har jeg skam også, og der kommer scriptfejl ;-S
filter.alpha er nul eller ikke et objekt
Avatar billede para7 Nybegynder
18. oktober 2008 - 18:08 #45
Altså fejl i IE (den plejer jo ellers at være så tilgivende, men ikke i dag ;)
Avatar billede para7 Nybegynder
20. oktober 2008 - 09:43 #46
Tak indtil nu til roenving og w13. Kan I ikek lige sende svar for point. Dog ville jeg meget gerne have beholdt fading i IE. alternativt bare have layere af vejen efter 3 sekunder.
Avatar billede para7 Nybegynder
20. oktober 2008 - 09:44 #47
Altså layeret af vejen med fading efter 3 sekunder.
Avatar billede para7 Nybegynder
20. oktober 2008 - 10:02 #48
Hvis vi nu smider det der Khtml ud, kan vi så undgå fejl, ellers må jeg lukke her og oprette et spm ang. timed fade og forsvinden af layeret.

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    if(document.getElementById(id).filters)
        object.filter.alpha.opacity=opacity;
    object.display = opacity<=0 ? "none" : "block";
}
//-->
</script>
Avatar billede para7 Nybegynder
20. oktober 2008 - 10:07 #49
Det her er ufarligt of laver ikke fejl i nogen browser, men mangler jo altså fade i IE:

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    if(object.filters)
      object.filter.alpha.opacity=opacity;
    object.display = opacity<=0 ? "none" : "block";
}
//-->
</script>
Avatar billede w13 Novice
20. oktober 2008 - 10:13 #50
Det skal nok komme til at virke. =) Jeg kan bare ikke se på det lige nu.
Avatar billede w13 Novice
20. oktober 2008 - 15:26 #51
Prøv lige at rette:

    if(object.filters)
      object.filter.alpha.opacity=opacity

til:

    if(object.filters){
      object.filter.alpha.opacity=opacity;
      alert("Det bliver forsøgt kørt i IE!");
    }

Så kan du se, om den overhovedet prøver, dvs. om den kommer ind i if-sætningen, i IE.
Avatar billede para7 Nybegynder
20. oktober 2008 - 18:56 #52
OK, men der kommer så fejl: et objekt var ventet...

Men jeg bilder mig ind at IE efter de par sekunder laver en meget kort fading, hvis man er hurtig i opfattelsen ;)
Avatar billede para7 Nybegynder
20. oktober 2008 - 18:58 #53
Er du der roenving, du kan også nå at svare inden jeg lukker...?
Avatar billede roenving Novice
21. oktober 2008 - 05:31 #54
object er jo style-objektet, og filters-tingen findes direkte på element-objektet, derfor omvejen ...
Avatar billede para7 Nybegynder
21. oktober 2008 - 08:17 #55
Tak for lektionen, selvom JS er en slags russisk for mig, jeg aldrig har fået sat mig rigtigt ind i. Jammen så får w13 point. Men altså ingen ved rigtigt hvordan man får det til at fade med IE. Så må jeg nok spørge efter et timeout forsvindingsnummer i et nyt spm, tak for nu.
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