mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 27.04.2024 05:59 Benutzername: Passwort: Auto-Login

Thema: [JavaScript] setTimeout- Problem vom 03.05.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [JavaScript] setTimeout- Problem
Seite: 1, 2  Weiter
Autor Nachricht
WurstOderWas
Threadersteller

Dabei seit: 26.03.2003
Ort: -
Alter: 43
Geschlecht: Männlich
Verfasst Di 03.05.2005 12:18
Titel

[JavaScript] setTimeout- Problem

Antworten mit Zitat Zum Seitenanfang

Hi Leute,

mit folgendem Script möchte ich ein Bannerrotating schreiben, dass mir nach und nach die Banner wie an einem Laufband anzeigt. Funktioniert soweit auch, aaaber wenn ich das ganze jetzt via JavaScript zeitverzögert durchlaufen lassen will, dann öffnet mir die Funktion ein neues Fenster, in dem dann nur die Banner zu sehen sind.
Will ja aber, dass nur die Banner einmal weiterdrehen und die Seite erhalten bleibt. Jemand ne Idee?

Code:
<script language="JavaScript">
            function bannerrotate(zaehler){
               for(i=0;i<5;i++){
                  if((i+zaehler)>=<?echo $count?>){
                     zaehler = 0;
                  }
                  if(bannerarray[i+zaehler]){
                     document.write(bannerarray[i+zaehler]);
                     zaehler++;
                  }
               }
               setTimeout("bannerrotate(1)", 3000);
            }
            bannerrotate(0);
      </script>


Gruß,

Wursti


Zuletzt bearbeitet von WurstOderWas am Di 03.05.2005 12:25, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
way2hot

Dabei seit: 14.03.2004
Ort: Jüchen-Gierath
Alter: 41
Geschlecht: Männlich
Verfasst Di 03.05.2005 12:30
Titel

Antworten mit Zitat Zum Seitenanfang

Ist zwar jetzt um einiges mehr Script, aber das generiert dir eine Art DiaShow, welche die vordefinierten Bilder (wenn gewünscht auch mit Transition -> IE) austauscht.

Code:
<!-- configurable script -->
<SCRIPT LANGUAGE="JavaScript">
theimage = new Array();

///// Configurable Variables

// The dimensions of ALL the images should be the same or some of them may look stretched or reduced in Netscape 4.
// Format: theimage[...]=[name/description, image_src, linking_url]
//Hier Bildernamen plus Ordnerhierarchie eingeben!!!!
theimage[0]=["", "images/slideshow/slide01.jpg", ""];
theimage[1]=["", "images/slideshow/slide02.jpg", ""];
theimage[2]=["", "images/slideshow/slide03.jpg", ""];
theimage[3]=["", "images/slideshow/slide04.jpg", ""];
theimage[4]=["", "images/slideshow/slide05.jpg", ""];

///// Plugin variables

playspeed=5000;// The playspeed determines the delay for the "Play" button in ms
dotrans=1; // if value = 1 then there are transitions played in IE
transtype='blendTrans';// 'blendTrans' or 'revealtrans'
transattributes='duration=2,transition=12';// duration=seconds,transition=#<24
randomorder=0;
linksperline=4; // For the text links
playdiffernce=500; // The speed that the autplay speed is changed by
autostart=1;
preloadslides=1;
</SCRIPT>
<!-- end of configurable script -->
<!-- plugin scripts -->

<SCRIPT>
// Preloader
function preloadSlide() {for(k=0;k<til;k++) {theimage[k][1]=new Image().src=theimage[k][1];}}

// Add extra functions between the {} if you need other functions that require the onload
window.onload=function(){
if(window.preloadslides)preloadSlide();if(window.autostart)slidePlay();}

// NS4 resize handler
window.onresize=function(){
if(document.layers)this.location=this.location;}
</SCRIPT>
   <!-- end of plugin scripts -->
   <!-- slide show HTML -->
   <FORM NAME="slideshow">
      <DIV ALIGN="CENTER">
         <SCRIPT>document.write('<IMG NAME="slideimage" STYLE="filter:'+transtype+'('+transattributes+');" SRC="'+theimage[0][1]+'" BORDER=0>')</SCRIPT>
      </DIV>
   </FORM>
   <!-- end of slide show HTML -->
   <!-- fixed script -->
 <SCRIPT>
///// DO NOT EDIT THIS SCRIPT
with(document){i=0,play=0,di=images,dl=links,form=slideshow,til=theimage.length}

function slideImage(num) {
// Required Script
i=num%til;if(i<0)i=til-1;
if(document.all&&dotrans==1)eval('di.slideimage.filters.'+transtype+'.apply()')
di.slideimage.src=theimage[i][1];
if(document.all&&dotrans==1)eval('di.slideimage.filters.'+transtype+'.play()')
// Plug-in handlers
if(form.theimages)form.theimages.selectedIndex = i;
if(form.slidebox)form.slidebox.value = theimage[i][0];
if(form.slidecount)form.slidecount.value = "Image "+(i+1)+" of "+til;
if(form.slidespeed)doSpeed(0);}

function slidePlay() {
if (!window.playing) {
slidePlaying(i+1);
if(form.play)form.play.value="   Anhalten   ";}
else {playing=clearTimeout(playing);
if(form.play)form.play.value="   Abspielen  ";}
if(di.imgPlay){setTimeout('di.imgPlay.src="'+imgStop+'"',1);imgStop=di.imgPlay.src}}

function slidePlaying(num) {
playing=setTimeout('slidePlaying(i+1);slideImage(i+1);', playspeed);}

slideImage(0);
</SCRIPT>
<!-- end of fixed script -->


Ursprünglich haste da auchnoch Buttons drunter, um selber weiter zu blättern, aber die hab ich für meinen Zweck rausgelöscht. Daher sind aber in dem script noch ein paar der Funktionen drin, also nicht verwirrt sein... *zwinker*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
WurstOderWas
Threadersteller

Dabei seit: 26.03.2003
Ort: -
Alter: 43
Geschlecht: Männlich
Verfasst Di 03.05.2005 12:36
Titel

Antworten mit Zitat Zum Seitenanfang

Das Array meiner Variablen wurde vorher schon beschrieben.
Das funktioniert ja auch alles.

Das Problem ist das Öffnen in einem neuen Fenster.
Soll doch im eigenen Fenster bleiben.
  View user's profile Private Nachricht senden
freaknerd

Dabei seit: 03.05.2005
Ort: Owschlag
Alter: 49
Geschlecht: Männlich
Verfasst Di 03.05.2005 12:41
Titel

POste doch mal das vollständige Script

Antworten mit Zitat Zum Seitenanfang

Hallo Flo, poste doch mal das vollständige Script mit der Arraydefinition und so. Dann kann man der Sache auch näher kommen.

Gruß
Carsten
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
WurstOderWas
Threadersteller

Dabei seit: 26.03.2003
Ort: -
Alter: 43
Geschlecht: Männlich
Verfasst Di 03.05.2005 12:49
Titel

Antworten mit Zitat Zum Seitenanfang

Hi Carsten,


Code:
<script language="JavaScript">
               var bannerarray = new Array(<?echo $count;?>);
      </script>
<?
for ($p=0;$p<$count;$p++)
      {   
            ?>
            <script language="JavaScript">
                  bannerarray[<?echo $p;?>] = "<td align=center valign=middle width=<?echo $tdwidth?>%><a href=../dateien/page_bottom_click.php?ID=<?echo $ban[$p]['id'];?> target=_blank><img src=../dateien/includes/module/uploads/<?echo $ban[$p]['banner_pic'];?> border=0 alt=<?echo $ban[$p]['banner_title'];?>></a></td>";
            </script>
            <?
      }
?>
<script language="JavaScript">
            function bannerrotate(zaehler){
               for(i=0;i<5;i++){
                  if((i+zaehler)>=<?echo $count?>){
                     zaehler = 0;
                  }
                  if(bannerarray[i+zaehler]){
                     document.write(bannerarray[i+zaehler]);
                     zaehler++;
                  }
               }
               setTimeout("bannerrotate(1)", 3000);
            }
            bannerrotate(0);
      </script>


Tjoa, also so sieht im Groben der Code aus.
Vorher finden natürlich noch Datenbankabfragen statt, aber die funktionieren und sind irrelevant.
Die Rotationsfunktion funktioniert ja auch eigentlich, nur wird halt ein neues Fenster geöffnet.


coole neue Seite übrigens *zwinker*


Zuletzt bearbeitet von WurstOderWas am Di 03.05.2005 12:49, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
freaknerd

Dabei seit: 03.05.2005
Ort: Owschlag
Alter: 49
Geschlecht: Männlich
Verfasst Di 03.05.2005 13:19
Titel

document.write()

Antworten mit Zitat Zum Seitenanfang

Hallo Flo,

das Problem ist das document.write(); Mit diesem Befehl wird alles im Document überschrieben. D.h. auch Header, deine Tabelle und alles was so um die Banner rum ist. Das sieht dann aus wie ein neues Fenster.

Du solltest da den Ansatz vielleicht nochmal überdenken.

Option1: Für die Banner (falls Sie ein einheitliches Format haben) einen Platzhalter blank.gif mit der entsprechenden Größe einsetzen und dann einfach mit der timeOut() Funktion einen Bildwechsel vornehmen und die Verlinkung in einer Variable anpassen.

Option2: Falls Du noch Bewegung haben möchtest, mußt Du einen Layer als Maske (overflow:hidden) über den Bannerlayer legen und den Bannerlayer dann darunter animieren. Dann müsstest Du allerdings die Banner alle im Hintergund schon laden.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
caZpa
Account gelöscht


Ort: -

Verfasst Di 03.05.2005 13:33
Titel

Antworten mit Zitat Zum Seitenanfang

genau.
nich das ganze dokument neu beschreiben.
definiere den teil der beschrieben werden soll.

z.b.
<td name="banner">
dann
banner.write(...)

müsste eigentlich klappen
 
way2hot

Dabei seit: 14.03.2004
Ort: Jüchen-Gierath
Alter: 41
Geschlecht: Männlich
Verfasst Di 03.05.2005 13:49
Titel

Antworten mit Zitat Zum Seitenanfang

caZpa hat geschrieben:
genau.
nich das ganze dokument neu beschreiben.
definiere den teil der beschrieben werden soll.

z.b.
<td name="banner">
dann
banner.write(...)

müsste eigentlich klappen



Klappt das auch, wennman das dirkt auf ein Bild anwendet? Denn dann könnte er das ja dann genauso machen. Also:

Code:
<img src="banner.gif" name="banner">

banner.write()


Hmm...?!
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen [javascript] setTimeout?
problem mit setTimeout: angezeigte seite wird überschrieben
setTimeout ausführen bei mouseover
[JS] setTimeout einmal und dann nie wieder?
SetTimeout bei Mouseout löschen und bei Mouseover setzen
Mit Hilfe von setTimeout auf Seite davor gelangen...
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
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.