Ich bin dabei, einen revolvierenden Textgenerator zu erstellen. Der Generator kombiniert Sätze (Text) aus einer Reihe von Feldern, "durchläuft" sie visuell und hängt sie an. Ich dachte, es wäre am besten, eine Fiddle mit einer Basisversion des Generators zu erstellen, wie ich es jetzt gebaut habe:
Erläuterung
Die grundlegenden Funktionen sind wie folgt:
Array1
, Array2
und Array3
in der Geige) combo0
und combo1
in der Geige) Generate
aufgerufen, die die Sätze aus einem Array von Sätzen ( combo0[0]
in der Geige) var times = 8
in der Geige) Generate
erneut ausgeführt, diesmal mit dem zweiten Array ( combo0[1]
in der Geige) Der Grund für den Rückruf ist, dass ich warten muss, bis der zyklische Effekt abgeschlossen ist, und dann weitermachen.
Das Problem
Während dies genau das tut, was ich brauche (und neben der Tatsache, dass ich sehr zweifelhaft bin, ob dies der Weg ist; ich fühle mich immer ein bisschen komisch, wenn ich eine Funktion schreibe, die sich selbst wiederholt), habe ich folgendes Problem :
In den Arrays combo
definiere ich, welche der 'Satz'-Arrays mögliche Kombinationen sein können. Das funktioniert gut, wenn zwei Kombinationen sind, aber bei mehr als zwei habe ich ein Problem:
Ich müsste dies rekursiv neu schreiben, um die Möglichkeit eines combo
-Arrays bestehend aus 3 oder sogar 4 Optionen zu berücksichtigen. Und wahrscheinlich wird dies das Skript brechen, wenn ein combo
-Array nur 2 (oder 1) Arrays enthält.
Hier stehe ich fest. Das Hauptproblem ist, dass, wenn ich über das combo
-Array, z. Mit einem .each (); wird die Funktion generate
mehrmals synchron aufgerufen, so dass der gesamte "Zyklus" -Effekt verloren geht.
Ich habe versucht, verschiedene Schleifen zu schreiben, die die Array-Länge des gegebenen combo
-Arrays berücksichtigen, aber ich habe heute mehr Browser als jemals zuvor abgestürzt, und ich kann nicht herausfinden, was zu tun ist.
Ich habe es geschafft, es zu beheben. Etwas Zeit weg vom Bildschirm ist eine gute Sache.
Was ich getan habe, ist einen 'n' Zähler hinzuzufügen, der sich erhöht, wenn das Vielfache der times
Variable erreicht wird, wodurch die Funktion die Iteration fortsetzen, aber vom nächsten Array aus ausgeben (siehe drittletzte Zeile) %Code%). Schließlich wird geprüft, ob noch Arrays übrig sind, um festzustellen, ob wir fertig sind. Wenn Sie fertig sind, schreiben Sie den Satz ein letztes Mal, führen Sie den optionalen Callback aus und geben Sie false zurück. Auf diese Weise akzeptiert die Funktion das gesamte Array und nicht nur das Subarray ( lists[n]
im Gegensatz zu combo
):
Siehe die Arbeitsgeige hier: Ссылка
Ich hoffe, das hilft anderen!
Tags und Links javascript arrays jquery