function Kette mit timeout

  • Hallo,
    ein paar Fragen..


    Wie kann ich verhindern das die function bei mehrfachaufruf mit dem letzten i ausgeführt wird?
    Wie kann ich die div's (bei mehrfachklick) genau so possitionieren und steuern, ohne das sie sich hintereinander anstauen, sondern untereinander anreihen und nachrutschen.


    Joa das sind die wichtigsten..


    Hier das Problem:
    http://wolfts.no-ip.org/allertbox.html
    Hier der Code zum spielen
    http://jsfiddle.net/6mhHL/
    Und hier der Code:

    HTML
    <body>
        <article>
            <h1>Try it out.</h1>
            <button>Use the alert() command</button>
            <button>Use the alert() too</button>
        </article>
    </body>


    Hilfe wär voll cool :love:

  • Von der Idee her:
    - eventuell ein Klick-Maximum einsetzen
    - bei jedem Klick die Höhe der Alertbox zum top-Wert hinzuzählen


    1. box -> kein zusätzlicher wert
    2. -> + Höhe
    3. -> + 2x Höhe
    ...
    Nach jedem Timeout eine Höhe subtrahieren.



    Zum debuggen hab ich keine Zeit 8o

  • Ne das mit der Höhe ist blöd...
    Wenn dann mal n langer/kurzer Text ausgegeben wird....
    Das muss irgendwie gehen :D


    &&kennt ihr ne function alle browserprozesse im fenster zu stoppen/starten? -> so wie es alert ja vor und nach dem >ok< klick macht..

  • sowas gefällt mir =)
    sorry, hab mich bissl verspielt, aber macht echt spass :D
    => http://jsfiddle.net/6mhHL/1/


    der (mMn) Grund warum da was durcheinander gekommen ist, ist, weil Du mit setTimeout i als String gegeben hast.
    Dadurch wurde immer das aktuelle i genutzt, das ja schon wieder durch ein neues alert hochgezählt sein konnte.
    Durch setTimeout(function ... kannst Du das "echte"(?) i übergeben.


    Tipp: immer debug function schreiben/nutzen und wenn Du Werte, also wie zB Timeoutzeit, nutzt dann immer oben in ner config definieren. Das macht das ändern/anpassen sehr viel einfacher.

  • Ne das mit der Höhe ist blöd...


    Variable Höhen sind auch kein Problem, sofern man beim 2. die Höhe des vorherigen Elementes ausliest und übermittelt.


    Alternativ könnte ein Wrapping helfen, welches als absolutes Overlay dient.
    Somit können Inhalte ohne position: absolute verschachtelt werden und die Boxen bleiben im Fluß der Struktur um sich gegenseitig zu verdrängen.

  • OIMG


    hahahah :D
    der Button war blockiert von darüber liegendem Debug Text :D ^^


    EDIT
    Haha ja dein Edit sagt es :P


    Ich werd noch ein bisschen bastenln, dann bekommt ihr n "tutorial" ;)

  • Du meinst wenn 2 boxen auf sind, und eine davon ausgeblendet wird => dass die übrige nach oben "flutscht"?


    Hmm, ... liegt ja daran, dass das element nicht mehr nach oben verschwindet, sondern nur noch opacity auf 0 geht und dann aus dem DOM gelöscht wird.
    Dann müsstest Du evtl die Höhe der auszublendenen box verringern. Also height:0px. Mit transition dürfte das animiert werden und flutscht nicht mehr :D

  • Tooop danke ;)
    Also noch ein schritt, bevor aus dem DOM löschen.. :)


    Gibt's ne Möglichkeit dass hier so zu bauen, dass die Var definiert wird, bevor das Script geladen wird? :D

    HTML
    <script src="alert.js">
        /*config*/
        var boxconfig = {
            "fadein" : 30,
            "fadeout" : 6000,
            "delete" : 2700,
            "debug" : true
        };
    </script>


    Und kann man das hier zusammenfassen?

    JavaScript
    box[i]["elem"].style.top = "-200px";
    box[i]["elem"].style.opacity = 0;
    box[i]["elem"].style.lineheight = "0px";
    box[i]["elem"].style.padding = 0;
    box[i]["elem"].style.minHeight = "0px";
    box[i]["elem"].style.maxHeight = "0px";


    Was ich nicht vertsehe, wieso die Buttons nichtmehr gehen.. :x

  • Ersteres versteh ich net ganz.
    Willst Du die config gesondert ablegen?
    Dann müsste das file zuerst eingebunden werden, oder im alert File evtl ne Prüfung, ob die config schon geladen wurde/existiert.
    zB


    zum 2.; einzigste was mir einfällt

    JavaScript
    var s = box[i]["elem"].style;
        s.top = "-200px";
        s.opacity = 0;
        s.lineheight = "0px";
        s.padding = 0;
        s.minHeight = "0px";
        s.maxHeight = "0px";

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!