-» Clues of DUG
-» DUG Partner
-» Stream Panel
Tote Hose? Wie ihr sicher schon bemerkt habt, ist auf DUG-Portal in letzter Zeit wenig los. Da ich mein Hobby (Webentwicklung ect.) zum Beruf gemacht habe, habe ich für den Blog nur noch wenig Zeit bzw. keine Lust in meiner Freizeit auch noch vorm PC zu vergammeln. Daher gibt es nur noch selten etwas neues. Dennoch werde ich versuchen, hier und da etwas zu schreiben. Man wird sehen was die Zeit bringt...

JS/CSS Layer Script mit Cookie Reloadsperre

Hier habe ich mal ein Layer Script gecodet, welches rein auf Javascript aufbaut. Es wird also keine Serverseitige Sprache benötigt. Weder PHP noch MYSQL wird vorausgesetzt.

Die Reloadsperre basiert hier auf Cookie-Basis via Javascript. Es wird vorher überprüft, ob der User das speichern von Cookies erlaubt. Sind Cookies deaktiviert wird der Layer erst gar nicht angezeigt - da er sonst nicht mehr geschlossen werden könnte. Die Reloadsperre gilt also auch ganz ohne zusätzliche IP-Sperre, als sehr zuverlässig.

HTML CODE:
<!-- LAYER SCRIPT BY WWW.DUG-PORTAL.COM -->
<div style="display:none;" id="layer"><div id="line"><a name="exit" href="#exit" onclick="exit(); return false;">CLOSE</a></div><div id="inhalt"><span onclick="exit();">
<script src="LINK ZUR JS DATEI" type="text/javascript"></script>

<!-- Hier kommt der Layer-Inhalt rein! iFrame bitte IMMER wie folgt angeben:
<iframe scrolling="no" frameborder="0" src="http://www.google.de"></iframe> -->
</span></div></div>
<!-- LAYER SCRIPT BY WWW.DUG-PORTAL.COM -->

Diesen Teil am besten kurz vor dem schließenden </body> Tag einfügen! Damit wird sichergestellt dass die Ladezeit der Seite nicht durch den Layer beeinträchtigt wird.

JAVASCRIPT CODE:
//---------------------------------------------------------------------------------
// LAYER SCRIPT BY WWW.DUG-PORTAL.COM - EINSTELLUNGEN
//---------------------------------------------------------------------------------
var t1m3 = 1000*60*60; // Zeit in welchem Abstand der Layer erscheint
var layh = '400'; // Layer Hoehe
var layw = '600'; // Layer Breite
var layt = '80'; // Abstand oben
var layf = '1000'; // iFrame Hoehe (nur wenn ein iFrame als Inhalt angegeben wird)
var layx = '1000'; // iFrame Breite (nur wenn ein iFrame als Inhalt angegeben wird)
var layo = 'auto'; // Bildlaufleisten ein/ausblenden hidden/auto (Bei iFrame immer auf auto)
var layg = 'left'; // Text Ausrichtung
var lays = 'eeeeee'; // Layer Background Color
var layl = '99CC00'; // Leiste Background Color
var layb = '000000'; // Border Color
var laya = 'FF0000'; // Exit Link Farbe
var laye = 'ffffff'; // Exit Link Hover Farbe
//---------------------------------------------------------------------------------

// Alle Cookies holen
function gc(cn) {
if (document.cookie.length>0) {
st=document.cookie.indexOf(cn + "=");
if (st!=-1) {
st=st + cn.length+1;
en=document.cookie.indexOf(";",st);
if (en==-1) en=document.cookie.length;
return unescape(document.cookie.substring(st,en));
}}
return ""; }

// Funktion zum schliessen
function exit() {
document.getElementById('layer').style.display = 'none';

// + Cookie setzen
var a = new Date();
a = new Date(a.getTime() +t1m3);
document.cookie = 'layerdug=none; path=/; expires='+a.toGMTString()+';';

// Das Cookie für die Cookie-Prüfung unten, wird hier gelöscht
// Da es nur zur Überprüfung dient, wird es nicht länger benötigt
document.cookie = 'check=cookie; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
}

// Wenn kein Cookie gesetzt, Inhalt anzeigen
laydug=gc('layerdug');
if (laydug!="none") {

// Bzw. prüfen ob der User das speichern von Cookies erlaubt
// Inhalt verbergen wenn Cookies deaktiviert sind
document.cookie = 'check=cookie; path=/';
ccaon=gc('check');
if (ccaon=="cookie") {

// Layer Pixel berechnen
var layc = layw / 2;
var layy = layh - 39;

// Stylesheet generieren
var hct_b = document.createElement('style');
var hct_c = '#layer{z-index:999;position:fixed;border:1px solid #'+layb+';width:'+layw+'px;height:'+layh+'px;margin-left:-'+layc+'px;left:50%;top:'+layt+'px;background-color:#'+lays+';font-family:Verdana,sans-serif,tahoma;font-size:11px;}#inhalt iframe{border:0;width:'+layx+'px;overflow:hidden;height:'+layf+'px;}#line{border-width:0px 0px 1px 0px;border-style:solid;border-color:#'+layb+';padding:5px;text-align:right;background-color:#'+layl+';}#inhalt{height:'+layy+'px;overflow:'+layo+';text-align:'+layg+';padding:8px;}#line a{color:#'+laya+';text-decoration:none;font-size:9px;font-weight:bold;}#line a:hover{color:#'+laye+';}';

hct_b.setAttribute("type", "text/css");
if (hct_b.styleSheet) {
hct_b.styleSheet.cssText = hct_c;
} else {
var hct_a = document.createTextNode(hct_c);
hct_b.appendChild(hct_a);
}
var hh1 = document.getElementsByTagName('head')[0];
hh1.appendChild(hct_b);

// Layer von display:none auf block umstellen
document.getElementById('layer').style.display = 'block';
}
}

Dieser Teil wird in eine JS Datei (name.js) ausgelagert. Link zur Datei im Script drüber anpassen (siehe rot markierte Stelle).

Und so sieht der Layer dann aus:
Error: Image Not Found!

Ich habe mich dazu entschlossen das ganze ohne Grafiken zu gestalten. Das Aussehen kann natürlich via CSS beliebig angepasst werden (siehe Einstellungen). Drückt man hier auf den "CLOSE" Link oder auf den Layer Inhalt, so verschwindet der Layer und die Releoadsperre wird aktiv. Der Layer taucht dann erst wieder auf, nachdem das Cookie abgelaufen ist (je nach eingestellter Zeit - aktuell 1 Stunde).

Hinweis:Damit der Layer richtig funktioniert muss ein gültiger DOCTYPE vorhanden sein!

Chanchelog (Last Update 22.06.2010)

22.06.2010
HTML Code und JAVASCRIPT Code voneinander getrennt.
Was eine bessere Performance + Übersicht bietet
Des Weiteren können jetzt auch sogenannte Randomscripte eingesetzt werden (Info)

17.05.2010
Funktion zum überprüfen ob der User Cookies erlaubt (Info)

27.12.2009
Bildlaufleisten angepasst
Zwei Browserspezifische Bugs behoben
Script mit zusätzlichen Kommentaren versehen
Sonstige kleinere Änderungen

26.12.2009
Komplett überarbeiteter Code
Einstellungen via Variabeln möglich
Bildlaufleisten hinzugefügt
iFrame Funktion (Hinweis)

20.12.2009
Erste Version

Tags: css layer, javascript layer, css popup script, html css layer script

36 Kommentare:

  1. Der einzige Grund warum ich den Blog hier besuche sind die Scripte die hier angeboten werden.Finde ich echt genial.

    Danke
    AntwortenLöschen
  2. Freut mich danke! Naja der eine besucht den Blog wegen dem, der eine wegen dem andern ect. Deswegen gibt es hier ja auch von allem ein bisschen. (;
    AntwortenLöschen
  3. Wenn er jetzt noch von allen möglichen Seiten komm würde wäre er perfekt. ;)
    Aber mal wieder Top Arbeit von euch.
    AntwortenLöschen
  4. jetzt suche ich noch ein Rotations code!

    Könnte ich mal hinweise bekommen wo ich eins finde?
    AntwortenLöschen
  5. danke aber ich kappiere das net
    AntwortenLöschen
  6. Was kapierst du nicht? Also einfacher als einfach geht ja wohl nicht mehr. Wenn du die einfachsten Dinge nicht kapierst, dann lern erstmal die Grundlagen von HTML...
    AntwortenLöschen
  7. also ich habe es versucht einzufügen doch dann wird nur im layer der link angezeigt und nicht die seite
    AntwortenLöschen
  8. Also ich weiss leider nicht wirklich wie ich dir helfen kann, denn eigentlich steht bereits alles oben Schritt für Schritt.

    Du fügst das Random-Script einfach am Anfang der JS Datei hinzu, da wo eben auch der Teil für den Layer drin ist.

    Und dann als Inhalt einfach:
    <script type="text/javascript">showbanner();</script>
    AntwortenLöschen
  9. Super Script. Herzlichen Dank. Habe lange gesucht bis ich ein Layerscript mit Reloadsperre gefunden habe.
    Nun aber auch gleich eine Frage zu der Einzustellenden Zeit. Was bedeuten die Zahlen var t1m3 = 1000*60*60; bezw für was stehen die Zahlen 1000, 60 und 60?
    AntwortenLöschen
  10. 1000 Millisekunden sind eine Sekunde, mal 60 macht eine Minute, und mal 60 macht eine Stunde. In diesem Beispiel beträgt die Cookie-Lebensdauer also genau eine Stunde.
    AntwortenLöschen
  11. wie kann man oben in der leiste einen Textlink links am rand machen?
    AntwortenLöschen
  12. Ersetze...
    <div id="line">

    mit...
    <div id="line"><div style="float:left;">TEXT</div>
    AntwortenLöschen
  13. Hallo,

    vielen Dank, für das schöne Script. Ich würde den Layer gerne für meinen Wordpress Blog nutzen. Ich habe ihn unten in der Header.php eingebunden. Leider liegen einige Inhalte des Blogs über dem Header. Der Header sollte aber eigentlich über allem liegen, so dass man an seinem Platz nur den Layer sieht und keine Elemente der Seite wie z.B. die Navigation. Was mache ich falsch?
    AntwortenLöschen
  14. Ich verstehe ehrlich gesagt dein Problem nicht so ganz.

    "Leider liegen einige Inhalte des Blogs über dem Header"

    Naja das hat aber nichts mit meinem Layer zu tun, da hast du wohl eher ein Problem mit deiner Seite.

    "Der Header sollte aber eigentlich über allem liegen, so dass man an seinem Platz nur den Layer sieht"

    Hää? Was möchtest du nun, den Layer in den Header deiner Seite einbinden, oder was?
    AntwortenLöschen
  15. Tut mir Leid, ich habe da einmal Header und Layer verwechselt. Der Layer soll natürlich nicht in in dem Header erscheinen :- )

    Also liegt das an meinem Blog, wenn paar Elemente der Seite über dem Layer liegen?

    Danke, für die rasche Antwort :- )
    AntwortenLöschen
  16. Aso jetzt hab ich dich verstanden. Also um welche Elemente handelt es sich denn? Sind das vlt. Flash-Elemente die über den Layer liegen? Ein Link zu deiner Seite mit eingebautem Layer wäre natürlich auch nicht verkehrt. Solltest du deine Seite nicht veröffentlichen wollen, so schick mir eine Nachricht über das Kontaktformular
    AntwortenLöschen
  17. Hallo DI4V0L0,

    vielen dank, für deine schnelle Antwort. Ich habe über das Kontaktformular meine URL geschickt :- )
    AntwortenLöschen
  18. Ok sollte jetzt funktionieren. Das Problem war einfach, dass auf deiner Seite bestimmte Elemente explizit mit einem z-index hervorgehoben werden. Nun habe ich einfach dem Layer einen hohen z-index verpasst.
    AntwortenLöschen
  19. Tausend Dank, sehr nett von dir... Also einfach den neuen Code von der Seite nehmen?
    AntwortenLöschen
  20. Genau! Ich habe nur den Javascript Code um eine CSS-Angabe (z-index:999) erweitert.
    AntwortenLöschen
  21. Eine Frage: Wie kann ich die Reloadzeiten verstellen? Wofür stehen die einzelnen Werte in 1000*60*60? Ich hätte es gern so eingestellt, dass man jedes mal den Banenr angezeigt bekommt, oder ein mal täglich z.B.

    Wie ginge das? Danke für die Hilfe.
    AntwortenLöschen
  22. .. sorry. Hat sich natürlich schon erledigt. ar zu ungeduldig.
    AntwortenLöschen
  23. Danke ich werd das Script gleich mal antesten. ;)
    AntwortenLöschen
  24. Hi danke vielmals für das einfach zu installierende Script. Funktioniert tadellos.
    Ein Wunsch hätte ich aber noch. Gibt es eine Möglickeit, dass der Layer immer zentriert im Browserfenster dargestellt wird?
    Oder sonst noch die Zusatz-Option Abstand von links
    AntwortenLöschen
  25. Der Layer ist eigentlich so aufgebaut, dass er immer zentriert im Browserfenster erscheint. Welchen Browser benutzt du denn?
    AntwortenLöschen
  26. Wie mache ich es wenn ich im Background ein Bild haben möchte und wenn ich draufklicke dann zur Webseite geführt werden will.
    AntwortenLöschen
  27. Kommt drauf an was du machen willst. Soll nur das Background-Image im Layer sichtbar sein oder auch ein Inhalt? Soll dann der Inhalt + das Background-Image anklickbar sein? Oder oder...
    AntwortenLöschen
  28. klasse script, wirklich!
    leider kenne ich mich nur mit html / php ein bischen aus, daher die frage ob es die möglichkeit gibt den layer erst nach einer verzögerung anzuzeigen, bzw. auf wunsch zu öffnen.?!

    mfg
    joschi
    AntwortenLöschen
  29. ps: funktioniert nicht mit dem IE8 / google chrome :( firefox ohne probleme...
    AntwortenLöschen
  30. Das mit dem IE8 kann ich nicht bestätigen - funktioniert ohne Probleme! Ich denke mal du hast einfach vergessen den DOCTYPE im Dokument anzugeben. Sofern das HTML-Dokument richtig aufgebaut ist, sollte der Layer in allen gängigen Browsern funktionieren.

    Natürlich kann man den Layer auch so umschreiben, dass er erst nach einem Klick erscheint. Eine Verzögerung erreichst du mit "setTimeout".

    Leider fehlt mir gerade die Zeit, so dass ich dir nicht weiterhelfen kann - musst du selber ran (;
    AntwortenLöschen
  31. danke für den tipp.
    angegeben ist:
    ->

    IE zeigt den layer nur zur hälfte an, nicht mittig, sondern ganz links am rand. Chrome öffnet den layer gar nicht. alles auf verschiedenen versionen gestestet und an verschiedenen rechnern.
    kann natürlich auch an meinem design liegen, ich mach heute abend mal ne konforme, leere standardpage, teste die sache noch mal durch und werde dann berichten ^^ über das set timeout werde ich mich mal belesen :)

    mfg
    joschi
    AntwortenLöschen
  32. Du kannst auch diese Seite hier zum testen nehmen, da hier genau dieser Layer - in verkleinerter Form - verbaut ist. Grundsätzlich teste ich auch immer mit IE (ausgeschlossen IE6), Firefox, Safari, Chrome und Opera.
    AntwortenLöschen
  33. Hello,

    would it be possible to put the space around the layer box under a gray or white transparent layer ?
    The same as Greybox works, for example.
    http://orangoo.com/labs/GreyBox/

    Thx
    AntwortenLöschen
  34. Yes, it is possible! However, i can not help, i have no time.. Sorry.
    AntwortenLöschen
  35. Hello,

    I saw the box located in the right bottom corner.
    Can you tell whet settings are needed for this ?
    In the default settings I can only choose the distance from the top.

    Thx!
    Mike
    AntwortenLöschen