09. januar 2008 - 11:36
Der er
10 kommentarer og 1 løsning
Kald funktioner med timeout
Hej, jeg har dette stykke kode opacity('sletstifterperson', 100, 0, 700);setTimeout('toggleDiv(\'sletstifterperson\',0)',701); Først køre vi en funktion der hedder opacity (den får en div'en til at fade væk på 0,7ms (visuelt), lige efter kalder vi en funktion (der hedder toogleDiv som sætte display:none; så den er forsvundet. Det fungere fint. Problemet er den anden vej, hvor jeg først sætte div til display.block; -> og så fader den ind. Det betyder den blinker i et kort øjeblik.... det jeg gerne vil er at undgå det "blink"... Nogle ideer?
Annonceindlæg fra Barco
09. januar 2008 - 11:58
#1
Prøv at vise den funktion, der fader boksen til synlig.
09. januar 2008 - 13:11
#2
Nu får du lige en klump data, jeg lavede for laang tid siden. Det har lidt i samme stil som det du gerne vil. <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <TITLE></TITLE> </HEAD> <BODY> <script> var images = new Array("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg"); /* General Functions */ var ie; var timeOut; var lastImage = 0; var fadeElm = new Array(); function browser(){ ie = (document.all) ? true : false; } function getE(id){return document.getElementById(id);} /************************/ function preloadImages(vImages){ var oImg = new Image(); for(i=0;i<vImages.length;i++){ oImg.src = vImages[i]; } } function initPage(){ browser(); preloadImages(images,"images"); } // startFading(vObj,vDT,vType) starts to fade a object // vObject = reference to the object to be faded, vDT is delaytime, vType can be "in" "out" function startFading(vObj,vDT,vType){ var found = false; var elmsCount = fadeElm.length; for(i=0;i<elmsCount;i++){ if(fadeElm[i][0] == vObj){ found = true; if(vType=="out"){ fadeElm[i][1] = vDT; fadeObjOut(i); } else{ fadeElm[i][1] = vDT; fadeObjIn(i); } break; } } if(!found){ fadeElm[elmsCount] = new Array(); fadeElm[elmsCount][0] = vObj; fadeElm[elmsCount][1] = vDT; if(vType=="out"){ fadeObjOut(elmsCount); } else{ fadeObjIn(elmsCount); } } } function getIndexWithObj(vObj){ var elmsCount = fadeElm.length; for(i=0;i<elmsCount;i++){ if(fadeElm[i][0] == vObj){ return i; } } return -1; } function setOpacity(vObj,vVal){ if(ie){ vObj.filters.alpha.opacity = vVal; } else{ vObj.style.MozOpacity = vVal/100; } } function fadeObjOut(index){ var vObj = fadeElm[index][0]; try{clearTimeout(fadeElm[index][2]);} catch(e){} var opa = (ie) ? vObj.filters.alpha.opacity : vObj.style.MozOpacity; if(!ie){ opa = opa*100; if(opa<1) opa=0;} if(opa>0){ setOpacity(fadeElm[index][0],opa-2); fadeElm[index][2] = setTimeout(function(){fadeObjOut(index)},fadeElm[index][1]); } } function fadeObjIn(index){ var vObj = fadeElm[index][0]; try{clearTimeout(fadeElm[index][2]);} catch(e){} var opa = (ie) ? vObj.filters.alpha.opacity : vObj.style.MozOpacity; if(!ie){ opa = opa*100;} if(opa < 100){ setOpacity(fadeElm[index][0],opa+2); fadeElm[index][2] = setTimeout(function(){fadeObjIn(index)},fadeElm[index][1]); } } function rotateImg(vObj){ if(lastImage<images.length){ lastImage++; vObj.src = images[lastImage]; setTimeout(function(){fadeObjIn(vObj),10},100); } else{ lastImage = 0; vObj.src = images[lastImage]; setTimeout(function(){fadeObjIn(vObj),10},100); } } //filter:alpha(opacity=25);-moz-opacity:.25;opacity:.25; window.onload = initPage; </script> <P> </P> <input type="button" onClick="fadeObjOut(getE('img1'));" value="fadeObjOut"> <input type="button" onClick="fadeObjIn(getE('img1'));" value="fadeObjIn" id=button1 name=button1> <div>Pic1:<br> <img id="img1" src="images/1.jpg" width="400" height="300" style="filter:alpha(opacity=100);-moz-opacity:1;" onMouseOver="startFading(this,1,'out')" onMouseOut="startFading(this,10,'in');"> </div> <div>Pic2:<br> <img src="images/3.jpg" width="400" height="300" style="filter:alpha(opacity=100);-moz-opacity:1;" onMouseOver="startFading(this,50,'out')" onMouseOut="startFading(this,20,'in');"> </div> <div>Pic2:<br> <img src="images/2.jpg" width="400" height="300" style="filter:alpha(opacity=100);-moz-opacity:1;" onMouseOver="startFading(this,100,'out')" onMouseOut="startFading(this,30,'in');"> </div> <div id="debug"></div> </BODY> </HTML>
09. januar 2008 - 13:11
#3
Jeg ville kode det ind i opacity-funktionen, at når den er på 0%, skal boksen sættes til style.display.none og når den er på 1% skal den sættes til style.display.block. Så behøver du heller ikke din timeout.
10. januar 2008 - 12:13
#4
<!-- 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 + ")"; } //--> Desværre er jeg ikke en stor javascript haj, så jeg er blevet nød til at lave den hack løsning som tidligere beskrevet. Hvis der er nogle der har mod på at kode det ind i selve opacity funktionen, vil der være perfekt.
10. januar 2008 - 13:02
#5
Tror du skal rette: //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 + ")"; } til: //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 + ")"; if(opacity>0)document.getElementById(id).style.display="block"; else document.getElementById(id).style.display="none"; }
10. januar 2008 - 13:27
#6
-- og lige for at spare noget taste-arbejde (og formindske fejlmulighederne !-) document.getElementById(id).style.display = opacity>0 ? "block" : "none";
10. januar 2008 - 14:13
#7
Endnu bedre, ja :) //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 + ")"; document.getElementById(id).style.display=opacity>0?"block":"none" }
10. januar 2008 - 14:24
#8
-- og vi har jo objektet i forvejen: object.display=opacity>0?"block":"none"; !-)
10. januar 2008 - 14:56
#9
... //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.display=opacity>0?"block":"none" } :)
11. januar 2008 - 12:49
#10
Tak for hjælpen!
11. januar 2008 - 13:47
#11
Det var så lidt og tak for point!
Vi tilbyder markedets bedste kurser inden for webudvikling