von Thomas Salvador.
In "Bannerrotation mit JavaScript" wurde gezeigt, wie man in Javascript eine einfache Rotation von Bannern realisiert.
Die Routinen dort wählten aus einer Liste von möglichen Bannern einen aus und verzweigen bei anklicken zu der für diesen Banner hinterlegten Adresse.
Nachteilig war dort die Nutzung von zwei Feldern: ein Feld für die Bilder und ein Feld für die Adressen. Diese müssen im Sync gehalten werden, damit die Adresse zum Bild passt.
In "Bannerrotation mit JavaScript II" wurde dies durch eine Rotation ersetzt, die mit Funktionsaufrufen betrieben wird. Sie ist daher einfacher zu nutzen und die Fehlerquelle für Verschiebungen fällt weg.
Hier nun finden Sie eine technische Verbesserung:
Somit können Sie sowohl einen zufälligen Banner darstellen lassen, aber auch eine echte Rotation über mehrere, ggf. unterschiedlich große Banner, ohne Neuladen der Seite erzeugen.
Und natürlich können Sie das Javascript direkt von meinem Server laden und nutzen.
Wir erstellen eine Datei banner.js, die das Javascript enthält (oder laden es direkt von meinem Server, siehe Beispiel):
// bannerrotation III - Thomas Salvador, 2010, brauchbar.de // free to use, if this notice is kept intact var banner_data = new Array(); function banner_define(picture,link,width,height,alt) { l_picture = picture; l_link = link; if (banner_define.arguments.length > 2) { l_width = width; } else { l_width = 0; } if (banner_define.arguments.length > 3) { l_height = height; } else { l_height = 0; } if (banner_define.arguments.length > 4) { l_alt = alt; } else { l_alt = ''; } banner_data[banner_data.length] = new Array(l_picture,l_link,l_width,l_height,l_alt); } function banner_output(id,delay,defined) { if (banner_output.arguments.length == 3) { no = defined; } else { no = (new Date()).getTime()%banner_data.length; } container = document.getElementById(id); img = banner_data[no][0]; href = banner_data[no][1]; if (banner_data[no][2] != 0) { width=' width="'+banner_data[no][2]+'"'; } else { width=''; } if (banner_data[no][3] != 0) { height=' height="'+banner_data[no][3]+'"'; } else { height=''; } if (img.substr(img.length-4,4) == '.swf') { container.innerHTML = '<object type="application/x-shockwave-flash"' + ' data="'+img+'"' + width+height+'>' + '<param name="movie"' + ' value="'+img+'" />' + '</object>'; } else { alt=' alt="'+banner_data[no][4]+'" title="'+banner_data[no][4]+'"'; container.innerHTML = '<a href="'+href+'" target="_top">' + '<img border="0" src="'+img+'"'+width+height+alt+'></a>'; } if (banner_output.arguments.length == 3) { setTimeout('banner_output("'+id+'",'+delay+','+((defined+1)%banner_data.length)+');',delay); } else { if (banner_output.arguments.length == 2) { setTimeout('banner_output("'+id+'",'+delay+');',delay); } } }
Die Banner werden als Feld banner_data angelegt, dessen Werte den URL des Bildes und den URL des Zieles enthalten. Es wird durch Aufrufe von banner_define(picture,link,width,height,alt) gefüllt.
Die ausgebende Funktion heißt banner_output(id,delay,defined) und platziert den HTML-Code im Platzhalter id.
Dabei wird no die Nummer des Banners zugewiesen, der dargestellt werden soll.
Das funktioniert so:
Dies wiederum % (modulo) die Anzahl der Banner liefert das Ergebnis. Da modulo die Funktion zur Restbildung ist, liefert A % B immer einen Wert aus dem Bereich 0 bis B-1. Bsp: 15 % 7 = 1, denn 2*7+1=15.
Damit ist no recht zufällig ist. Er ist schlecht vorhersehbar und dürfte sich ändern, wenn der Besucher die Seite auffrischt.
Ist ein Wechsel mit delay gesetzt, wird nach dieser Verzögerung ein anderer Banner gezeigt.
Realisiert wird es so, dass für den via setTimeout der nächste Aufruf von banner_output eingeplanr wird.
Weiter ist img der URL zum Banners und href der URL zur Ziel des Verweises.
In der Ausgabe wird das entsprechende HTML erzeugt. Im wesentlichen wird Unterschieden, ob einne Shockwave-Datei als Objekt angezeigt wird oder ein klickbares Banner.
Tatsälich könnten wir auch den link optional machen, und die gleiche Routine dann als Bannerrotation und als Diashow verwenden.
Zur Einbindung platzieren Sie im Kopfbereich Ihres Dokumentes die Anweisung
<script type="text/javascript" src="banner.js"></script>
Sie können das Javascript direkt von meinem Server laden:
<script type="text/javascript" src="https://brauchbar.de/services/banner-200.js"></script>
Nun legen Sie fest, wo der Banner stehen soll und erzeugen dort einen leeren Container mit entsprechendem Namen:
<div id="meinbanner"></div>
Erzeugen Sie im Kopfbereich eine Funktion, die ihre Banner definiert und die Ausgabe fordert:
<script type="text/javascript"><!-- function mybanner() { banner_define("https://www.google.de/images/nav_logo7.png","https://google.de"); banner_output("meinbanner"); } //--> </script>
Abschließend lassen Sie dieses Script starten, wenn das Dokument geladen wurde. Geeignet ist hier der onload-Event des <body>-Tag:
<body onload="mybanner();">
In diesem Beispiel wird einer von zwei Bannern und ein Flash-Banner gezeigt. Der Startbanner ist dabei freilich häufiger der gleiche, soll uns als Beispiel aber genügen.
Dabei lassen wir es fest beim ersten (Index 0) beginnen und alle 1000 Millisekunden, also jede Sekunde, auf den jeweils nächsten wechseln.
<html> <head> <title>Banner-Beispiel</title> <script type="text/javascript" src="https://brauchbar.de/services/banner-200.js"></script> <script type="text/javascript"><!-- function mybanner() { banner_define('https://brauchbar.de/images/bb-logo2.gif', 'https://brauchbar.de',468,60,'brauchbar'); banner_define('https://www.google.de/intl/de_de/images/logo.gif', 'https://google.de',468,60,'google'); banner_define('https://brauchbar.de/images/flash-banner-demo.swf', 'flash',468,60,'flash'); banner_output("meinbanner",2000); } //--> </script> </head> <body onload="mybanner();"> <p>Vor dem Banner.</p> <div id="meinbanner"></div> <p>Nach dem Banner.</p> </body> </html>
Das sieht so aus:
Vor dem Banner.
Nach dem Banner.
Natürlich können Sie auch die definierende mybanner() in eine separate Datei auslagern und somit auf mehreren Seiten nutzen. Lagern Sie etwa Ihre Definitionen in mybanner.js aus, so verkürzt sich das Beispiel auf:
<html> <head> <title>Banner-Beispiel</title> <script type="text/javascript" src="https://brauchbar.de/services/banner-200.js"></script> <script type="text/javascript" src="mybanner.js"></script> </head> <body onload="mybanner();"> <p>Vor dem Banner.</p> <div id="meinbanner"></div> <p>Nach dem Banner.</p> </body> </html>
Viel Spaß mit dieser flexiblen Bannerrotation.