mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 07:32 Benutzername: Passwort: Auto-Login

Thema: problem mit setTimeout: angezeigte seite wird überschrieben vom 12.01.2010


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> problem mit setTimeout: angezeigte seite wird überschrieben
Autor Nachricht
crazylobster
Threadersteller

Dabei seit: 12.01.2010
Ort: Deep Sea
Alter: -
Geschlecht: Männlich
Verfasst Di 12.01.2010 20:53
Titel

problem mit setTimeout: angezeigte seite wird überschrieben

Antworten mit Zitat Zum Seitenanfang

hi leute,

habe ein problem mit setTimeout. und zwar habe ich eine slideshow, die nach einem fade-effekt (mootools) eingeblendet wird. das klappt soweit auch. der haken ist, dass während des fade-vorgangs schon eine gewisse zeit vergeht, sodass das erste bild der galerie nur kurz erscheint. das ist nervig. deswegen möchte ich die galerie mit setTimeout erst verzögert starten. das klappt aber überhaupt nicht. die slideshow überschreibt meine seite (mit document.write?) und wird auf weissem hintergrund geöffnet. was kann ich tun? gibt es einen anderen weg, soll ich die galerie selber anpassen? weiß nur leider nicht wie? * Keine Ahnung... *

hier mein code:

so will ich die galerie verzögert ausführen...
Code:
setTimeout(function(){new fadeshow(fadeimages, 948, 292, 0, 5000, 1, "R");},1000);



meine slideshow:
Code:
/***********************************************
* Ultimate Fade-In Slideshow (v1.51): © Dynamic Drive (http://www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for this script and 100s more.
***********************************************/

var fadeimages=new Array()
//SET IMAGE PATHS. Extend or contract array as needed
fadeimages[0]=["media/images/home/newsNewBalance.png", "?category=work&name=newbalance", ""] //plain image syntax
fadeimages[1]=["media/images/home/newsHatakeBlog.jpg", "http://link/", ""] //plain image syntax
fadeimages[2]=["media/images/home/newsNewBalance2.jpg", "?category=work&name=newbalance", ""] //plain image syntax
fadeimages[3]=["media/images/home/newsAndreasBintz.jpg", "?category=work&name=andreasbintz", ""] //plain image syntax

var fadebgcolor="white"

////NO need to edit beyond here/////////////

var fadearray=new Array() //array to cache fadeshow instances
var fadeclear=new Array() //array to cache corresponding clearinterval pointers

var dom=(document.getElementById) //modern dom browsers
var iebrowser=document.all

function fadeshow(theimages, fadewidth, fadeheight, borderwidth, delay, pause, displayorder){
this.pausecheck=pause
this.mouseovercheck=0
this.delay=delay
this.degree=10 //initial opacity degree (10%)
this.curimageindex=0
this.nextimageindex=1
fadearray[fadearray.length]=this
this.slideshowid=fadearray.length-1
this.canvasbase="canvas"+this.slideshowid
this.curcanvas=this.canvasbase+"_0"
if (typeof displayorder!="undefined")
theimages.sort(function() {return 0.5 - Math.random();}) //thanks to Mike (aka Mwinter) :)
this.theimages=theimages
this.imageborder=parseInt(borderwidth)
this.postimages=new Array() //preload images
for (p=0;p<theimages.length;p++){
this.postimages[p]=new Image()
this.postimages[p].src=theimages[p][0]
}

var fadewidth=fadewidth+this.imageborder*2
var fadeheight=fadeheight+this.imageborder*2

if (iebrowser&&dom||dom) //if IE5+ or modern browsers (ie: Firefox)
document.write('<div id="master'+this.slideshowid+'" style="position:relative;width:'+fadewidth+'px;height:'+fadeheight+'px;overflow:hidden;"><div id="'+this.canvasbase+'_0" style="position:absolute;width:'+fadewidth+'px;height:'+fadeheight+'px;top:0;left:0;filter:progid:DXImageTransform.Microsoft.alpha(opacity=10);opacity:0.1;-moz-opacity:0.1;-khtml-opacity:0.1;background-color:'+fadebgcolor+'"></div><div id="'+this.canvasbase+'_1" style="position:absolute;width:'+fadewidth+'px;height:'+fadeheight+'px;top:0;left:0;filter:progid:DXImageTransform.Microsoft.alpha(opacity=10);opacity:0.1;-moz-opacity:0.1;-khtml-opacity:0.1;background-color:'+fadebgcolor+'"></div></div>')
else
document.write('<div><img name="defaultslide'+this.slideshowid+'" src="'+this.postimages[0].src+'"></div>')

if (iebrowser&&dom||dom) //if IE5+ or modern browsers such as Firefox
this.startit()
else{
this.curimageindex++
setInterval("fadearray["+this.slideshowid+"].rotateimage()", this.delay)
}
}

function fadepic(obj){
if (obj.degree<100){
obj.degree+=10
if (obj.tempobj.filters&&obj.tempobj.filters[0]){
if (typeof obj.tempobj.filters[0].opacity=="number") //if IE6+
obj.tempobj.filters[0].opacity=obj.degree
else //else if IE5.5-
obj.tempobj.style.filter="alpha(opacity="+obj.degree+")"
}
else if (obj.tempobj.style.MozOpacity)
obj.tempobj.style.MozOpacity=obj.degree/101
else if (obj.tempobj.style.KhtmlOpacity)
obj.tempobj.style.KhtmlOpacity=obj.degree/100
else if (obj.tempobj.style.opacity&&!obj.tempobj.filters)
obj.tempobj.style.opacity=obj.degree/101
}
else{
clearInterval(fadeclear[obj.slideshowid])
obj.nextcanvas=(obj.curcanvas==obj.canvasbase+"_0")? obj.canvasbase+"_0" : obj.canvasbase+"_1"
obj.tempobj=iebrowser? iebrowser[obj.nextcanvas] : document.getElementById(obj.nextcanvas)
obj.populateslide(obj.tempobj, obj.nextimageindex)
obj.nextimageindex=(obj.nextimageindex<obj.postimages.length-1)? obj.nextimageindex+1 : 0
setTimeout("fadearray["+obj.slideshowid+"].rotateimage()", obj.delay)
}
}

fadeshow.prototype.populateslide=function(picobj, picindex){
var slideHTML=""
if (this.theimages[picindex][1]!="") //if associated link exists for image
slideHTML='<a href="'+this.theimages[picindex][1]+'" target="'+this.theimages[picindex][2]+'">'
slideHTML+='<img src="'+this.postimages[picindex].src+'" border="'+this.imageborder+'px">'
if (this.theimages[picindex][1]!="") //if associated link exists for image
slideHTML+='</a>'
picobj.innerHTML=slideHTML
}

fadeshow.prototype.rotateimage=function(){
if (this.pausecheck==1) //if pause onMouseover enabled, cache object
var cacheobj=this
if (this.mouseovercheck==1)
setTimeout(function(){cacheobj.rotateimage()}, 100)
else if (iebrowser&&dom||dom){
this.resetit()
var crossobj=this.tempobj=iebrowser? iebrowser[this.curcanvas] : document.getElementById(this.curcanvas)
crossobj.style.zIndex++
fadeclear[this.slideshowid]=setInterval("fadepic(fadearray["+this.slideshowid+"])",50)
this.curcanvas=(this.curcanvas==this.canvasbase+"_0")? this.canvasbase+"_1" : this.canvasbase+"_0"
}
else{
var ns4imgobj=document.images['defaultslide'+this.slideshowid]
ns4imgobj.src=this.postimages[this.curimageindex].src
}
this.curimageindex=(this.curimageindex<this.postimages.length-1)? this.curimageindex+1 : 0
}

fadeshow.prototype.resetit=function(){
this.degree=10
var crossobj=iebrowser? iebrowser[this.curcanvas] : document.getElementById(this.curcanvas)
if (crossobj.filters&&crossobj.filters[0]){
if (typeof crossobj.filters[0].opacity=="number") //if IE6+
crossobj.filters(0).opacity=this.degree
else //else if IE5.5-
crossobj.style.filter="alpha(opacity="+this.degree+")"
}
else if (crossobj.style.MozOpacity)
crossobj.style.MozOpacity=this.degree/101
else if (crossobj.style.KhtmlOpacity)
crossobj.style.KhtmlOpacity=this.degree/100
else if (crossobj.style.opacity&&!crossobj.filters)
crossobj.style.opacity=this.degree/101
}


fadeshow.prototype.startit=function(){
var crossobj=iebrowser? iebrowser[this.curcanvas] : document.getElementById(this.curcanvas)
this.populateslide(crossobj, this.curimageindex)
if (this.pausecheck==0){ //IF SLIDESHOW SHOULD PAUSE ONMOUSEOVER
var cacheobj=this
var crossobjcontainer=iebrowser? iebrowser["master"+this.slideshowid] : document.getElementById("master"+this.slideshowid)
crossobjcontainer.onmouseover=function(){cacheobj.mouseovercheck=1}
crossobjcontainer.onmouseout=function(){cacheobj.mouseovercheck=0}
}
this.rotateimage()
}



hoffe, jemand hat ne idee!
greetz


Zuletzt bearbeitet von crazylobster am Di 12.01.2010 20:55, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden
danielkussin

Dabei seit: 04.06.2008
Ort: Hamburg
Alter: 42
Geschlecht: Männlich
Verfasst Mi 13.01.2010 10:40
Titel

Re: problem mit setTimeout: angezeigte seite wird überschrie

Antworten mit Zitat Zum Seitenanfang

Hi,

also leider ist dein Code schwierig zu lesen bzw. ein Fehler auszumachen, da es einfach zu viel Code ist. Aber ich geh mal davon aus, dass du den Code sowieso nicht geändert hast, wie es der Enttwickler geschrieben hat, sondern nur Konfigurationen vorgenommen hast, und an der entsprechenden Stelle, die Slideshow aufgerufen! Oder?

crazylobster hat geschrieben:

Code:
setTimeout(function(){new fadeshow(fadeimages, 948, 292, 0, 5000, 1, "R");},1000);



Was mich etwas stutzen lässt, ist dass du mit deiner Timeout-Funktion nicht die Slideshow-Funktion aufrufst, sondern ein neues Objekt mit new erzeugst!? Sollte der Aufruf nicht wie folgt heißen?

Code:
setTimeout(fadeshow(fadeimages, 948, 292, 0, 5000, 1, "R"),1000);


setTimeout Doku bei SelfHTML: http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout

Vielleicht ist das ja schon der Fehler! Hast du denn den alten Funktionsaufruf (ohne Timeout) gelöscht?

Gruß Daniel


Zuletzt bearbeitet von danielkussin am Mi 13.01.2010 10:43, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
crazylobster
Threadersteller

Dabei seit: 12.01.2010
Ort: Deep Sea
Alter: -
Geschlecht: Männlich
Verfasst Mi 13.01.2010 13:46
Titel

Antworten mit Zitat Zum Seitenanfang

hi daniel,

danke erstmal für die antwort.

das mit "new" ist der code mit dem ich die slideshow normalerweise, also ohne verzögerung aufrufe. das funktioniert auch.
Code:
new fadeshow(fadeimages, 948, 292, 0, 5000, 1, "R");


und ja, habe nicht's verändert am script, sondern nur die einstellungen angepasst.

diesen "rahmen" mit function() im setTimout habe ich als möglichkeit in anderen foren gefunden, um die parameter zu übergeben. ohne passiert das nicht. dann bleibt die stelle nämlich leer. mit der jetzigen methode sehe ich zumindest die slideshow, aber leider überschreibt sie meine seite.

die selfhtml doku hab ich mir ein paarma angeschaut, hilft mir aber auch nicht weiter * Keine Ahnung... *

grüße
  View user's profile Private Nachricht senden
 
Ähnliche Themen Mit Hilfe von setTimeout auf Seite davor gelangen...
[JavaScript] setTimeout- Problem
[javascript] setTimeout?
setTimeout ausführen bei mouseover
Variablen werden überschrieben?
[JS] setTimeout einmal und dann nie wieder?
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.