Just nu i M3-nätverket
Gå till innehåll

Timer/fördröjning


Admini

Rekommendera Poster

Hej

Jag hittar inget bra timer för en funktion i Javascript.

Hur kan jag starta en funktion skrivet i javascript efter en viss tid?

Tack

 

Länk till kommentar
Dela på andra webbplatser

Hej

Här är deras kod:

function callStatement1() {
  statement1...
  setTimeout('callStatement2()',2000); // delay 2 seconds
}
function callStatement2() {
  statement2...
}

 

och här är min:

function minTimer(){
setTimeout('CeaseScroll()',5000);
}

inuti body taggen har jag onload="minTimer()"

Borde det inte funka?

 

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

Jo, det borde funka. Det funkar när jag testar det. Vad får du för felmeddelande?

 

/ Johan

 

Länk till kommentar
Dela på andra webbplatser

Nej nu vet jag vad det var för fel. det är fixat.

MEN det funkar bara en gång!

Måste jag nollställa den efter varje gång?

I så fall efter eller innan setTimeOut?

 

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

Det du skriver i första parametern till setTimout dvs. 'CeaseScroll()' exekveras bara en gång när det gått 5000 millisekunder. För att få saker att hända igen efter en viss tid, måste du anropa setTimout igen ... (Kanske i slutet på funktionen CeaseScroll?)

 

/ Johan

 

Länk till kommentar
Dela på andra webbplatser

OK, men först en annan fråga:

Kan jag utföra 2 funktioner i samma setTimeOut?

setTimeout('funktion1();funktion2()',5000);

 

Allstå direkt efter varandra

 

Länk till kommentar
Dela på andra webbplatser

Du kan ju använda

oInterval = window.setInterval("funktion()", 1000);

och

if(oInterval!=""){
 window.clearInterval(oInterval);
 oInterval="";
}

för att köra funktioner med ett visst intervall.

 

//Telle

 

Oh ja, går att anropa flera funktioner från samma setTimeout-statement.

<html>
<head>

<script language="JavaScript">
function fn1(){
	alert("ett");
}

function fn2(){
	alert("två");
}

function init(){
	window.setTimeout("fn1();fn2();", 1000);
}
</script>
</head>
<body onload="javascript:init();">
</body>
</html>

 

 

Länk till kommentar
Dela på andra webbplatser

Vad jag egentligen vill göra är att jag har en "Scrollable area" med DIVar och LAYERs, vilket består av en del text som skrollar uppåt.

 

Men när den skrollar färdigt så stannar den där uppe.

Jag vill bara att den vänder neråt så fort den nått slutet av texten.

 

Kan nån hjälpa mig med det?

Tack

 

[inlägget ändrat 2003-03-18 14:43:17 av Admini]

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

Lägg upp, en till så stor utsträckning som möjligt strippad version av, den falerande koden, så kan jag felsöka...

 

(Dvs. en version som utgör ett så basalt exempel som möjligt på den kod du refererar till... Normalt sett dumpas hela websidor på Eforum, men det är betydligt enklare om man bara behöver sätta sig in den relevanta koden....)

 

/ Johan

 

Länk till kommentar
Dela på andra webbplatser

OK, här kommer delar av koden som jag tror är viktigaste:

function MoveArea(x,y){ 
   this.x=x;this.y=y 
   this.css.left=this.x 
   this.css.top=this.y 
} 

function MoveAreaDown(move){ 
if(this.y>-this.scrollHeight+objContainer.clipHeight){ 
   this.MoveArea(0,this.y-move) 
   if(loop) setTimeout(this.obj+".down("+move+")",speed) 
} 
} 
function MoveAreaUp(move){ 
if(this.y<0){ 
   this.MoveArea(0,this.y-move) 
   if(loop) setTimeout(this.obj+".up("+move+")",speed) 
} 
} 

function PerformScroll(speed){ 
if(initialised){ 
	loop=true; 
	if(speed>0) objScroller.down(speed) 
	else objScroller.up(speed) 
} 
} 

function CeaseScroll(){ 
   loop=false 
   if(timer) clearTimeout(timer) 
} 

 

Jag använder:

PerformScroll(1) för att rulla upp och

PerformScroll(-1) för att rulla ned

CeaseScroll(1) för att stanna

 

Behöver du andra delar av koden, säg gärna till!

Tack

 

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

Ser bra ut, men om jag får drista mig att vara lite trasslig, så skulle jag vilja ha en kod som gör detta:

 

Men när den skrollar färdigt så stannar den där uppe.

 

Så kan jag titta på hur man får detta att funka:

 

Jag vill bara att den vänder neråt så fort den nått slutet av texten.

 

 

Så jag tror jag skulle vilja ha själva divven och det som i övrigt behövs för ett fungerande (så när som på att den inte vänder) exempel...

 

Låter det görbart? (Kanske lika bra att slänga upp hela rasket - det blir mer sport så, dessutom... ;)

 

/ J

 

Länk till kommentar
Dela på andra webbplatser

javisst,

Den här koden klistrar du i början av dem kod jag skickade förut:

 

function verifyCompatibleBrowser(){ 
   this.ver=navigator.appVersion 
   this.dom=document.getElementById?1:0 
   this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0; 
   this.ie4=(document.all && !this.dom)?1:0; 
   this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0; 

   this.ns4=(document.layers && !this.dom)?1:0; 
   this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5) 
   return this 
} 
bw=new verifyCompatibleBrowser() 

var speed=50 

var loop, timer 

function ConstructObject(obj,nest){ 
   nest=(!nest) ? '':'document.'+nest+'.' 
   this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0; 
   this.css=bw.dom?document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+'document.'+obj):0; 
   this.scrollHeight=bw.ns4?this.css.document.height:this.el.offsetHeight 
   this.clipHeight=bw.ns4?this.css.clip.height:this.el.offsetHeight 
   this.up=MoveAreaUp;this.down=MoveAreaDown; 
   this.MoveArea=MoveArea; this.x; this.y; 
   this.obj = obj + "Object" 
   eval(this.obj + "=this") 
   return this 
} 

 

Och den här klistrar du i slutet:

 

var initialised; 
function InitialiseScrollableArea(){ 
   objContainer=new ConstructObject('divContainer') 
   objScroller=new ConstructObject('divContent','divContainer') 
   objScroller.MoveArea(0,0) 
   objContainer.css.visibility='visible' 
   initialised=true; 
}

 

Jag kommer snart DIVarna också

 

Länk till kommentar
Dela på andra webbplatser

Och kommer divarna:

<style type="text/css">  
#divDownControl{position:relative; width:0; left:10; top:0; z-index:1; text-align: right} 
#divUpControl{position:relative; width:0; left:5; top:0; z-index:1; text-align: right} 

#divContainer{position:relative; width:180; height:135; overflow:hidden; top:1; left:5; 
clip:rect(0,555,555,0); visibility:hidden} 

#divContent{position:relative; top:0; left:0} 
</style>

 

Sedan inne i body lägger du dessa runt den text som ska skrolla:

<div id="divContainer">
<div id="divContent">
En massa text .........
</div>
</div>

 

Tror det var allt

 

Länk till kommentar
Dela på andra webbplatser

Det här ska också va me:

<body onLoad="InitialiseScrollableArea()">

Men det har du säkert räknat ut själv:)

 

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

Jag tror att det ska göra susen om du byter ut till nedanstående funktioner...

 

function MoveAreaDown(move){ 
if(this.y>-this.scrollHeight+objContainer.clipHeight){ 
	this.MoveArea(0,this.y-move) 
	if(loop) setTimeout(this.obj+".down("+move+")",speed) 
}else{
	setTimeout(this.obj+".up(-1)",-1) 
}
} 

function PerformScroll(speed){ 
if(initialised){ 
	loop=true; 
	if(speed>0) objScroller.down(speed)
}else objScroller.up(speed) 
} 

 

/ Johan

 

Länk till kommentar
Dela på andra webbplatser

Du menar att jag tar bort

function MoveAreaUp(move)
...
...

 

Och lägget till följande i slutet av MoveAreaDown

 

else{
setTimeout(this.obj+".up(-1)",-1) 

 

Jag får ett konstigt felmed på rad 1 tecken 1.

objektet stöder inte metoden ...

 

Glömde säga att den stannar fortfarande där uppe!

 

Nej jag fick inte ta bort nånting och då funkar det.

Men nu vill jag att det händer samma sak när den nått början av texten: vända uppåt.

Alltså: Upp o ner och upp och ner ....osv i oändlighet:)

[inlägget ändrat 2003-03-18 21:25:01 av Admini]

[inlägget ändrat 2003-03-18 21:33:54 av Admini]

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

Det kanske var lite otydligt, men du ska alltså ersätta de gamla funktionerna med de nya.

 

Nedanstående borde funka för att texten ska vända uppåt när den åkt längst ned...

 

function MoveAreaUp(move){ 
if(this.y<0){ 
this.MoveArea(0,this.y-move) 
if(loop) setTimeout(this.obj+".up("+move+")",speed) 
}else{
setTimeout(this.obj+".down(1)",1) 
}

 

/ Johan

 

Länk till kommentar
Dela på andra webbplatser

Perfekt!

Nu funkar det som det ska.

En fråga bara:

Drar det processorkraft medan den skrollar?

 

Länk till kommentar
Dela på andra webbplatser

Hejsan!

 

Vad bra!

 

Ja, visst drar det processorkraft. Det gör allt som händer på en dator...

 

/ Johan

 

Länk till kommentar
Dela på andra webbplatser

Hej och tack för din hjälp, nu funkar det finfint.

Nu när vi ändå är på det, hur gör jag om jag vill att den ska börja från början när den nått slutet av texten.

Alltså inte vända om utan fortsätta i samma håll men från början.

Jag vet att du klarar det också ;)

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...