Ich möchte eine <div>
von 200px
bis auto
Höhe animieren . Ich kann es aber nicht zum Laufen bringen. Weiß jemand wie?
Hier ist der Code:
$("div:first").click(function(){
$("#first").animate({
height: "auto"
}, 1000 );
});
javascript
jquery
html
css
jquery-animate
Daniel
quelle
quelle
Antworten:
Speichern Sie die aktuelle Höhe:
Schalten Sie die Höhe vorübergehend auf Auto:
Holen Sie sich die automatische Höhe:
Wechseln Sie zurück zu
curHeight
und animieren Sie zuautoHeight
:Und zusammen:
quelle
.animated({height: autoHeight}, 1000, function(){ el.height('auto'); });
opacity: 0; position: absolute;
beim Messen angeben und diese entfernen, sobald Sie fertig sind.IMO ist dies die sauberste und einfachste Lösung:
Erläuterung: Das DOM weiß bereits beim ersten Rendern, welche Größe das erweiterte Div haben wird, wenn es auf die automatische Höhe eingestellt ist. Diese Eigenschaft wird im DOM-Knoten als gespeichert
scrollHeight
. Wir müssen nur das DOM-Element durch Aufrufen aus dem jQuery-Element abrufenget(0)
und können dann auf die Eigenschaft zugreifen.Das Hinzufügen einer Rückruffunktion zum Einstellen der Höhe auf Auto ermöglicht eine höhere Reaktionsfähigkeit, sobald die Animation abgeschlossen ist (Kredit Chris-Williams ):
quelle
clientHeight
, was nicht unterstützt zu werden scheint: developer.mozilla.org/en-US/docs/Web/ API / Element.clientHeight$('#first').animate({ height: $('#first').get(0).scrollHeight }, 1000, function() { $(this).height('auto'); });
scrollWidth
für Breitenanimationen.Dies ist im Grunde der gleiche Ansatz wie die Antwort von Box9, aber ich habe ihn in ein nettes JQuery-Plugin eingewickelt , das dieselben Argumente wie ein reguläres Animieren verwendet , wenn Sie mehr animierte Parameter benötigen und es leid sind, denselben Code immer wieder zu wiederholen ::
edit: jetzt verkettbar und sauberer
quelle
Eine bessere Lösung würde nicht darauf beruhen, dass JS die Höhe Ihres Elements festlegt. Das Folgende ist eine Lösung, die ein Element mit fester Höhe auf volle ("automatische") Höhe animiert:
https://gist.github.com/2023150
quelle
height
auf einen festen Wert (zB 122px). Mein Element änderte nach einer Weile die Höhe, so dass ich das Durationsargument (400) durch Optionen ersetzen musste{duration: 400, complete: function() {$selector.css('height', 'auto');}}
Dies funktioniert und es ist einfacher als Lösungen vor:
CSS:
JS:
Hinweis: Für diese Lösung ist die jQuery-Benutzeroberfläche erforderlich
quelle
.addClass
und einen zweiten Wert hinzu.removeClass
?quelle
Sie können die untergeordneten Elemente von #first jederzeit umbrechen und die Höhe des Wrappers als Variable speichern. Dies ist vielleicht nicht die schönste oder effizienteste Antwort, aber es macht den Trick.
Hier ist eine Geige, bei der ich einen Reset eingefügt habe.
Aber für Ihre Zwecke ist hier das Fleisch und die Kartoffeln:
quelle
Verwenden Sie slideDown und slideUp
quelle
Ich habe es geschafft, das Problem zu beheben: Hier ist der Code.
quelle
Sie können die Antwort von Liquinaut auf Änderungen der Fenstergröße reagieren lassen, indem Sie einen Rückruf hinzufügen, der die Höhe auf automatisch zurücksetzt.
quelle
Grundsätzlich steht Ihnen die Höhenautomatik erst zur Verfügung, nachdem das Element gerendert wurde. Wenn Sie eine feste Höhe festlegen oder wenn Ihr Element nicht angezeigt wird, können Sie ohne Tricks nicht darauf zugreifen.
Zum Glück gibt es einige Tricks, die Sie verwenden können.
Klonen Sie das Element, zeigen Sie es außerhalb der Ansicht an. Geben Sie ihm automatisch die Höhe. Sie können es aus dem Klon nehmen und später für das Hauptelement verwenden. Ich benutze diese Funktion und scheint gut zu funktionieren.
VERWENDUNG:
quelle
Sie können dies immer tun:
Hier ist eine Geige: http://jsfiddle.net/Zuriel/faE9w/2/
quelle
.appendTo("body")
durch.appendTo(el.parent())
Ihre Selektoren scheinen nicht übereinzustimmen. Hat Ihr Element die ID 'first' oder ist es das erste Element in jedem Div?
Eine sicherere Lösung wäre, "dies" zu verwenden:
quelle
$(this)
in Ihrem Click-Handler verwenden.animate({height: 'auto'})
hat keine Wirkung. Zumindest nicht mit jQuery 1.6.4.Probier diese ,
quelle
Hier ist eine, die mit BORDER-BOX funktioniert ...
Hallo Leute. Hier ist ein jQuery - Plugin Ich schrieb das gleiche zu tun, sondern auch erklären die Höhenunterschiede , die auftreten, wenn Sie haben
box-sizing
zu setzenborder-box
.Ich habe auch ein "yShrinkOut" -Plugin eingefügt, das das Element verbirgt, indem es entlang der y-Achse verkleinert wird.
Jeder der von mir verwendeten Parameter kann weggelassen oder auf null gesetzt werden, um Standardwerte zu akzeptieren. Die Parameter, die ich verwendet habe:
quelle
Folie umschalten (Antwort von Box9 erweitert)
quelle
Ich poste diese Antwort, obwohl dieser Thread alt ist. Ich konnte die akzeptierte Antwort nicht bekommen, um für mich zu arbeiten. Dieser funktioniert gut und ist ziemlich einfach.
Ich lade die Höhe jedes gewünschten Divs in die Daten
Dann benutze ich das einfach beim Animieren per Klick.
Ich verwende den CSS-Übergang, daher verwende ich nicht die jQuery-Animation, aber Sie können die Animation trotzdem ausführen.
quelle
Sie können es in einem Datenattribut speichern.
quelle
Ich brauchte diese Funktionalität für mehrere Lesebereiche auf einer Seite, um dies in einen Wordpress-Shortcode zu implementieren, bei dem ich auf dasselbe Problem gestoßen bin.
Technisch gesehen haben alle auf der Seite gelesenen Bereiche eine feste Höhe. Und ich wollte sie mit einem Knebel separat auf eine automatische Höhe erweitern können. Erster Klick: 'Auf volle Höhe der Textspanne erweitern', zweiter Klick: 'Auf Standardhöhe von 70px zurückklappen'
Html
CSS
Daher sieht das
data-base
Attribut, das ich zum Einstellen der erforderlichen festen Höhe benötige, sehr einfach aus . Dasdata-height
Attribut, mit dem ich die tatsächliche (dynamische) Höhe des Elements gespeichert habe.Der jQuery-Teil
Zuerst habe ich eine clickToggle-Funktion für meinen ersten und zweiten Klick verwendet. Die zweite Funktion ist wichtiger: Bei
setAttr_height()
allen.read-more
Elementen werden die tatsächlichen Höhen beim Laden der Seite imbase-height
Attribut festgelegt. Danach wird die Basishöhe über die Funktion jquery css eingestellt.Wenn beide Attribute festgelegt sind, können wir jetzt reibungslos zwischen ihnen wechseln. Nur chang die
data-base
auf die gewünschte (fest) Höhe und schalten Sie die .lesen-Klasse mehr für die eigene IDSie können alle sehen, wie es in einem Fiddle FIDDLE funktioniert
quelle
Wenn Sie nur ein Div ein- und ausblenden möchten, können Sie mit diesem Code jQuery animieren. Sie können jQuery den größten Teil der gewünschten Höhe animieren lassen oder Sie können die Animation animieren, indem Sie sie auf 0px animieren. jQuery benötigt nur eine von jQuery festgelegte Höhe, um sie in auto zu konvertieren. Das .animate fügt dem Element, das .css (height: auto) konvertiert, den style = "" hinzu.
Die sauberste Art und Weise, wie ich diese Arbeit gesehen habe, besteht darin, auf die erwartete Höhe zu animieren und sie dann automatisch einstellen zu lassen. Wenn sie richtig ausgeführt wird, kann sie sehr nahtlos aussehen. Sie können sogar über das hinaus animieren, was Sie erwarten, und es wird zurückschnappen. Beim Animieren auf 0px mit einer Dauer von 0 wird die Elementhöhe einfach auf die automatische Höhe gesenkt. Für das menschliche Auge sieht es trotzdem animiert aus. Genießen..
Es tut mir leid, dass ich weiß, dass dies ein alter Beitrag ist, aber ich hatte das Gefühl, dass dies für Benutzer relevant ist, die diese Funktionalität noch bei jQuery suchen und auf diesen Beitrag stoßen.
quelle
Ich habe etwas zusammengestellt, das genau das tut, wonach ich gesucht habe und das großartig aussieht. Wenn Sie die scrollHeight eines Elements verwenden, erhalten Sie die Höhe, zu der es in das DOM geladen wurde.
quelle