Dieser Code durchläuft eine unsortierte Liste mit der ID 'cyclelist'. Kann für jedes Element mit Kindern verwendet werden. Ersetzen Sie "ul#cyclelist li" durch die Elemente, die Sie durchlaufen möchten.
$(document).ready(function() {
var j = 0;
var delay = 2000; //millisecond delay between cycles
function cycleThru(){
var jmax = $("ul#cyclelist li").length -1;
$("ul#cyclelist li:eq(" + j + ")")
.animate({"opacity" : "1"} ,400)
.animate({"opacity" : "1"}, delay)
.animate({"opacity" : "0"}, 400, function(){
(j == jmax) ? j=0 : j++;
cycleThru();
});
};
cycleThru();
});
ul#cyclelist {width:200px;border:solid;position:relative;overflow:hidden;height:200px}
ul#cyclelist li {font-size:1.4em;padding:20px;opacity:0;position:absolute}
Ist es möglich, die Listenelemente zu aktiven Links zu machen? Wenn man sie zu Links macht, passiert nichts, warum?
Beachten Sie, dass es besser ist, den Selektor $(“ul#cyclelist > li”) zu verwenden, da es verschachtelte Listen geben kann.
@Dan Taylor. Sicher, warum nicht? Verwenden Sie <li><a href=”#.”>Link</a></li>
Kannst du eine Demo hochladen?
danke
Es funktioniert nicht in IE
Ja, es verhält sich leider nicht korrekt in IE..
Ist es möglich, die Aktion zu pausieren, wenn ein anderes Ereignis eintritt?
zum Beispiel Pause beim Überfahren mit der Maus
danke
Ich bin sicher, dass Sie Ihr Problem in den Jahren seit dieser Veröffentlichung gelöst haben, aber ich dachte, andere würden eine gute, solide Antwort zu schätzen wissen. Wisse einfach, dass dies sehr anders ist als der obige Code, um Intervalle zu verwenden.
$(document).ready(function() {
.animate({“opacity” : “0”}, 400, function(){
(j == jmax) ? j=0 : j++;
cycleThru();
});
zu
.animate({“opacity” : “0”}, 400, function(){
$(“ul#cyclelist li”).hide();
(j == jmax) ? j=0 : j++;
cycleThru();
});
Entschuldigen Sie den doppelten Beitrag… um IE zu beheben, ändern Sie
.animate({“opacity” : “0″}, 400, function(){
(j == jmax) ? j=0 : j++;
cycleThru();
});
zu
.animate({“opacity” : “0″}, 400, function(){
$(“ul#cyclelist li”).hide();
(j == jmax) ? j=0 : j++;
cycleThru();
});
Der IE-Fix scheint nicht zu funktionieren
Hier ist, was ich versucht habe
(function($) {
$.cycleThru = {
defaults: {
delay: 1,
}
}
$.fn.extend({
cycleThru:function(config) {
var config = $.extend({}, $.cycleThru.defaults, config);
return this.each(function() {
var delay = config.delay;
var ulid = $(this).attr(“id”);
var j = 0;
var jmax = $(this).children(“li”).length -1;
function cyclee(){
$(“ul#” + ulid + ” li:eq(” + j + “)”)
.animate({“opacity” : “1”} ,200)
.animate({“opacity” : “1”}, delay)
.animate({“opacity” : “0”}, 400, function(){
$(“ul#cycleThru_qoutes li”).hide();
(j == jmax) ? j=0 : j++;
cycleThru();
});
};
cyclee();
})
}
})
})(jQuery);
Scheint in IE nicht zu funktionieren. Sparen Sie Stunden, indem Sie dies überspringen und stattdessen das Cycle Plugin verwenden.
Das ist großartig
Es funktioniert auch in IE
Vielen Dank
Anstatt durch Animation der Opazität von 1 auf 1 zu verzögern, um korrekt zu arbeiten, verwenden Sie die Methode
.delay( 2000 ).*
*
Hat jemand Vorschläge, wie man das randomisiert? (jQuery-Neuling)
Corey,
Ich habe das nicht ausprobiert und bin sicher, dass jemand hier mehr dazu sagen könnte.
cycleThru wäre eine andere Funktion
In Ihrer Liste könnten Sie jedem 'li'-Element eine fortlaufende Nummer geben. Am Anfang der Funktion setzen Sie eine Variable auf eine zufällige Zahl innerhalb des Bereichs Ihrer Liste. Dann verwenden Sie diese Variable im bereits skizzierten jQuery-Teil. Es würde ungefähr so aussehen.
});
Hallo. Ich brauche diesen Zyklus, um nach dem Durchlaufen aller Elemente zu stoppen und dann eine Nachricht wie "gestartet" oder was auch immer die Nachricht anzuzeigen. ?Jemand ?
Dieser Code funktioniert perfekt für mich, außer dass ich eine Änderung brauche. Ich möchte, dass die Liste vertikal zentriert ist. So wie diese
texttext
texttexttext
Ich kann "position: absolute;" entfernen, um das zu erreichen, aber dann rückt jede nachfolgende Textzeile eine Zeile nach unten, wenn sie eingeblendet wird.
Weiß jemand, wie das geht? Danke.
Ups, das wurde nicht richtig angezeigt. Ich möchte den Text zentriert ausrichten.
Habe festgestellt, dass die Verwendung von FadeIn und FadeOut einfacher ist als die Verwendung von Opazität.
Ich konnte es einfach nicht ertragen, der Listenposition eine feste Höhe zu geben. Anstatt das Listenelement als absolut zu setzen, setzen Sie einfach "display: none;" darauf und FadeIn und FadeOut wechseln einfach das Display-Element und blenden es aus.
Was ist der beste Weg, um dies zu wiederholen; wieder am Anfang der Liste zu iterieren, sobald es abgeschlossen ist?
Ist es möglich, die Rotationszeit dynamisch abhängig von der Textlänge zu gestalten?
Wenn die Textlänge klein ist, ist die Zeit kurz und wenn sie lang ist, ist die Zeit länger.
function example() {
element.innerHTML = "code";
}
“`