Ich habe eine Sammlung von divs in einem Dokument, das gefiltert werden kann nach Klassenname, wie im Verstecken und Anzeigen von Elementen. Die Liste kann gefiltert werden, indem entweder auf ein entsprechendes Element in der Liste oder auf eines der Elemente im oberen Menü geklickt wird.JavaScript setTimeout verursacht ein scrollTop Event?
Ich machte this pen, um mein Problem zu veranschaulichen.
Ich rufe die Filterfunktion für jedes Klickereignis auf, die alle Elemente ausblenden, und nach der Verwendung von window.setTimeout()
zeige ich die richtigen wie unten an. Dies ist sowohl um eine Verzögerung zu erhalten, als auch um Fade-In CSS3-Animationen auszulösen.
var filter = function(el){
if(filterClass==='all'){
window.setTimeout(function(){
$('.project').show(); //show all projects
$('#filter-all').addClass('active');
}, 100);
}
else{
window.setTimeout(function(){
$('.'+filterClass).show(); //show filtered projects
$('#back2').show();
$('#'+elClassName).addClass('active');
}, 100);
}
};
Das Problem ist, dass wenn ich window.setTimeout()
die Ansicht scrollt bis an die Spitze, auch wenn der Blick in den unteren Teil der Seite ist.
Versuchen Sie dies im Stift:
- Alle anzeigen
- Scroll bis auf den Boden, so dass die oberen Rand des Dokuments in der Ansicht nicht sichtbar ist.
- Filter durch Klicken auf einige Div.
Ergebnis: Es wird richtig gefiltert, aber der Blick immer scrollt/springt auf die Spitze.
Warum passiert das?
Ich erwartete, dass es in der gleichen relativen Bildlaufansicht bleibt, wenn möglich und ansonsten am Ende der Bildlaufleiste endet. Dies ist für mich das Standard und gewünschte Verhalten.
Ich bin auf ein ähnliches Problem gestoßen, aber in meinem Fall wollte ich, wenn ich auf eine Schaltfläche klicke, die Daten ändern und ganz oben angezeigt werden, unabhängig davon, wie lange die Liste der Daten angezeigt wurde. Für mein Problem habe ich auf dem Klick ein 'window.scrollTo (0, 0)' Ereignis hinzugefügt. Sie könnten möglicherweise etwas Ähnliches tun, aber setzen Sie es auf ein Element auf der Unterseite oder etwas. – tcasey
Bitte geben Sie den relevanten Code in einem [mcve] in der Frage selbst an, nicht auf einer Website eines Drittanbieters. –
@tcasey Ich sehe, ich könnte die aktuelle Fensterhöhe speichern, wenn ein Benutzer klickt und dann hinterher setzt. Aber ich fürchte, das wird die Aussicht auf und ab springen lassen, aber ja, vielleicht. Obwohl ich lieber herausfinden würde, was das Problem verursacht. – Ljungren