tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
297
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    daFisch0r daFisch0r ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    18
    Hallo erstmal.
    Ich beschäftige mich nun seit kürzerer Zeit mit Javascript, nach dem ich erste Schritte in HTML und PHP unternommen habe. Bin jetzt auch schon soweit mittels getElementById die ersten Manipulationen an meiner Seite und den Objekten dort vorzunehmen. Doch ist halt noch alles ein wenig "stockend", meint das ich keine flüssig animierten Vorgänge gestaltet bekomme.

    habe die funktion setTimeout gefunden und mich an C erinnert, wo mit dem Befehl delay(int wert); der ablauf so und so viele millisekunden abgestoppt wird.
    Doch jetzt sieht der Syntax anders aus als bei C und ich müsste bei setTimeout ja, dass
    was gestoppt werden soll innerhalb der Funktion vor dem Zeitwert notieren. Also so:
    Code :
    1
    2
    3
    
    for (i = 0; i <= 129; i++) {
                document.getElementById("content2").style.left = "-" + (bilderZahl + i) + "px";
            }, 600);

    Aber irgendwo scheint sich bei mir ein Denkfehler aufgetan zu haben, da es nicht funktioniert.

    Gibt es denn eine vergleichbare Alternative zu setTimeout();? Und kommt diese näher an das Prinzip von delay(); heran?

    Danke für eure Hilfe

    btw: Wie konnte ich noch mal mittels mouseevent innerhalb der Funktion einen Abbruchbefehl erzeugen? Da gab es so etwas, hab zumindest davon gehört.

    So jetzt ist aber gut, mit der Fragerei!
     

  2. #2
    CPoly CPoly ist gerade online Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ich gehe mal davon aus, dass delay() den Ablauf des Programms verzögert. So etwas existiert in Javascript nicht. setTimeout() registriert eine Funktion, welche dann Asynchron ausgeführt wird. Das bedeutet, dass nach setTimeout der Code normal weiterläuft und wenn die angegebene Zeit abgelaufen ist, wird die festgelegte Funktion aufgerufen und dann an der aktuellen Stelle weitergemacht. Dein Ansatz kann also nicht funktionieren.

    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    var i = 0;
    window.setTimeout("fn", 600);
     
    function fn() {
        document.getElementById("content2").style.left = "-" + (bilderZahl + i) + "px";
        i++;
        if(i<129)
            window.setTimeout("fn", 600);
    }

    Oder besser via seIntervall


    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    var i = 0;
    var pointerAufDenTimer = window.setInterval("fn", 600);
     
    function fn() {
        document.getElementById("content2").style.left = "-" + (bilderZahl + i) + "px";
        i++;
        if(i>129)
            window.clearInterval(pointerAufDenTimer);
    }
     

  3. #3
    daFisch0r daFisch0r ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    18
    Also ich habe versucht den von dir vorgeschlagenen Code einzusetzen.
    Ich habe hier jetzt die ganze Funktion von mir mal drin.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    function klickeR() {
        var i=0;
        var bilder = document.getElementById("content2").style.left;
        
        /*
         * Hier wir der pure Wert aus dem Styleattribut des "content2" DIVs geholt und da es
         * erst ein String ist gesucht und danach zerlegt so das nur der warte als String
         * √ºbrig bleibt und anschlie√üend wird dieser String-Wert in eine Interger-Zahl ge√§ndert
         * so das mit dem Wert des "container2" DIVs gerechnet werden kann.
         */
        var eins = bilder.indexOf("-");
        var zwei = bilder.lastIndexOf("px");
        var neuBilder = bilder.slice(eins+1, zwei);
        var bilderZahl = parseInt(neuBilder);
     
     
        /*
         * Aufruf der eigentlichen Funktion.
         * Hier wird der Wert der Verschiebung erh√∂ht und die Tabelle mit den Bildern immer ein St√ºck
         * weiter nach links verschoben.
            
        if(bilderZahl<=530){
                
            for (i = 0; i <= 129; i++) {
                setTimeout("document.getElementById(\"content2\").style.left = \"-\" + (bilderZahl + i) + \"px\";}", 600);
                
            }
                
        } else {
            document.getElementById("myTxt").innerHTML += "  Das ist genug!!";
        }
            */
        window.setTimeout("fn()", 600);
     
        function fn() {
            document.getElementById("content2").style.left = "-" + (bilderZahl + i) + "px";
            i++;
            if (i > 129) {
                window.clearInterval(pointerAufDenTimer);
            }
        }
        
    }

    Diesen lasse ich über onclick="klickeR" in der HTML ausführen.
    Kann es sein das mein ganzes Layout für den Code einfach nur murks ist?
    Geht eine function innerhalb einer function überhaupt?
     

  4. #4
    daFisch0r daFisch0r ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    18
    boa Schwachsinn... jetzt misch ich schon die Antworten zusammen! Das darf ja nicht wahr sein!
    Sorry. Hab gesehen das ich ein wenig von der setTimeout und der setInterval Antwort vermischt habe. -.-
     

  5. #5
    daFisch0r daFisch0r ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    18
    Alles klar...
    Habe es nun mit der setTimeout(); Funktion geschafft.

    mein Code sieht nun folgernder maßen für rechts sowie links herum aus.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    
     
    var i=0;
    var bilderZahl= 1;
    function klickeR() {
        show=0;
        // Hilfsausgabe in eine textarea
        document.getElementById("myTxt").innerHTML += "Funktion gestartet: "+i+"\n";
        // Berechnung
        bilderZahl++;
        document.getElementById("content2").style.left = "-" + (bilderZahl) + "px";
        i++;
        
        // Überprüfung ob "i" gleich "129" ist, wenn ja soll "show" auf "1" gesetzt werden, damit
        // die Anweisung mit "setTimeout" nicht ausgeführt wird
        if (i == 129){
            show=1;
        }
        
        // Wird nur ausgeführt so lange "i" kleiner eins ist und show gleich eins ist
        if (i < 130 && show==0) {
            window.setTimeout("klickeR()", 1);
        }
        
        //Wenn show auf eins gesetzt wurde, und die zweite IF-Anweisung somit nicht ausgeführt wurde
        //werden "show" und "i" wieder auf null gesetzt, so dass die Funktion ein weiteres aufgerufen werden
        //muss.
        if(show==1){
            i=0;
            show=0;
        }
        
        
    }
     
     
    //----------------------------------|
    // Das ganze jetzt nur anders herum |
    //----------------------------------|
     
     
    function klickeL() {
        show=0;
        // Hilfsausgabe in eine textarea
        document.getElementById("myTxt").innerHTML += "Funktion gestartet: "+i+"\n";
        // Berechnung
        bilderZahl--;
        document.getElementById("content2").style.left = "-" + (bilderZahl) + "px";
        i++;
        
        // Überprüfung ob "i" gleich "129" ist, wenn ja soll "show" auf "1" gesetzt werden, damit
        // die Anweisung mit "setTimeout" nicht ausgeführt wird
        if (i == 129){
            show=1;
        }
        
        // Wird nur ausgeführt so lange "i" kleiner eins ist und show gleich eins ist
        if (i < 130 && show==0) {
            window.setTimeout("klickeL()", 1);
        }
        
        //Wenn show auf eins gesetzt wurde, und die zweite IF-Anweisung somit nicht ausgeführt wurde
        //werden "show" und "i" wieder auf null gesetzt, so dass die Funktion ein weiteres aufgerufen werden
        //muss.
        if(show==1){
            i=0;
            show=0;
        }
        
        
    }

    Ja, es sind die PHP brackets, aber es ist farbig besser zu sehen

    Zugegeben ist es nicht die eleganteste Lösung , und es scheint ein wenig zu "laggn" aber das wird schon passen.

    Danke für die Hilfe.
     

  6. #6
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.363
    Blog-Einträge
    4
    Du hast deinen Code in einen JAVA-Tag gepackt.
    Ich will hier nur anmerken das JAVA ≠ JAVASCRIPT ist!
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  7. #7
    daFisch0r daFisch0r ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    18
    Ist wirklich so und ich weiß das JScript nicht gleich Java ist.
    Das PHP stand noch da als in den Brackets tatsächlich PHP stand Habe dann mal Java ausprobiert und gefiel etwas besser. Aber es soll nicht zeigen das JS auch in einem Java-Prog funktioniert sondern hier der Übersichtlichkeit dienen!
     

  8. #8
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    offtopic: JScript ist wieder was anderes
     

  9. #9
    daFisch0r daFisch0r ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    18
    Hehe, ok, ich gebe mich geschlagen!

    Aber hey, es funktioniert immernoch!
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Mograoh animation in "key animation" umwandeln
    Von digital art im Forum Cinema 4D
    Antworten: 3
    Letzter Beitrag: 14.10.09, 13:51
  3. Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
    Von MTMonline im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 25.04.08, 09:49
  4. Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.05.05, 15:29
  5. "kleine" Animation in "großer" Animation in einer Schleife?
    Von Stefan Hönel im Forum Flash Plattform
    Antworten: 6
    Letzter Beitrag: 12.03.04, 17:28

Stichworte