2010-02-24 7 views
25

Meine jQuery slideToggle() ExperimentslideToggle Höhe „Springen“

Kann mir jemand sagen, warum meine Boxen „springen“, wenn ich sie öffnen? Die erste Hälfte rutschen sie, den Rest "springen" sie?

Danke, Johannes

Antwort

3

fand ich dieses Problem in vielen Gelegenheiten, in denen ich mit slideToggle nur die Höhe Animieren wurde aber nicht der Marge/padding.

Also, so etwas wie dies könnte es lösen:

$("#thediv").slideToggle().animate({"margin-bottom": "toggle"}); 
10

Der schnellste Update in Ihrem Fall:

.message_container { width: 361px; } 

Ich bin nicht genau sicher, warum, aber nicht gibt den Behälter eine feste Breite wenn ein <p> Ursachen Fragen enthält, geben sie es ein und jumpyness weggeht.

+0

Dies gilt auch für andere textorientierte eleme um wahr zu sein scheint B. '

22

Es ist eine einfache Lösung. Fügen Sie diese CSS-Regel zu Ihrem Stylesheet (in Firebug Getestet zu arbeiten, und aus meinen bisherigen Erfahrungen mit diesem Problem, das ist das Update):

ol.message_list { position: relative } 

Es ist ein CSS-Fehler, kein jQuery Fehler per se .

+1

+1 Getestet. Scheint, es richtig gereinigt zu haben. – Sampson

+0

Ich hatte das gleiche Problem und probierte diesen Fix, aber es funktionierte nicht für mich, also musste ich aufgeben und einen anderen Ansatz wählen (direkt vor der Folie, den Einschiebebereich mit der Opazität 0 sichtbar machen, die verschieben Container so hoch, dann schieben Sie es einfach auf diese Weise zurück). – ehdv

+1

Gerade hatte ich dieses Problem, dank Google & Stack Overflow funktionierte diese Lösung auch für mich. Um es zu abstrahieren, benötigte der Container des Elements, das verschoben wurde, "position: relative". – bcmcfc

2

Versehentlich denke ich, dass die einfachste Lösung zu verwenden, ist auch benutzerdefinierte Funktion jQuery mit belebtem padding/margin-top/bottom hinzuzufügen.

//this function is to avoid slideToggle jQuery jump bug. 
$.fn.slideShow = function(time,easing) { return $(this).animate({height:'show','margin-top':'show','margin-bottom':'show','padding-top':'show','padding-bottom':'show',opacity:1},time,easing); } 
$.fn.slideHide = function(time,easing) {return $(this).animate({height:'hide','margin-top':'hide','margin-bottom':'hide','padding-top':'hide','padding-bottom':'hide',opacity:0},time,easing); } 

Und useage Beispiel:

$(this).slideShow(320,'easeOutQuart'); 
$(this).slideHide(320,'easeOutQuart'); 

Mein Beispiel animierte Opazität Toggle-tu, Sie können es ändern, wie Sie benötigen.

4

CSS padding und jquery slideToggle nicht gut zusammenarbeiten. Versuchen Sie, die Polsterung zu schließen.

14

Was für mich hilft ist

overflow: hidden 

zum diesem Knebel ...

+0

'Überlauf: versteckt;' war die magische Soße für mich. Ich probierte 'Position: relative;' und 'min-height: 0;', aber keiner funktionierte. –

+0

Arbeitete auch für mich, aber ich verstehe nicht warum ... –

+0

Das ist die Lösung, die auch für mich funktionierte. –

3

Wenn gesetzt, die min-height Eigenschaft auch eine solche Panne auslösen können. In diesem Fall müssen Sie es zurücksetzen:

.toggle-container { 
position: relative; 
min-height: 0; 
} 
2

Ich finde die einfachste Lösung ist in der Regel das Polster aus dem Element zu entfernen, gleitet, und fügen Sie Polsterung zu einem Element innerhalb das Schiebeelement.

In diesem Beispiel wird das div mit dem Attribut von data-role="content" ist derjenige, gleitet, und die Polsterung zu tab-example__content

<div data-role="content" class="tab-example__content"> 
    ... 
</div> 

angewendet wird, um die ‚ruckartige‘ zu beheben Schiebe ich ein neues div innerhalb des Gleitelementes hinzugefügt und bewegt die Klasse/padding zu, dass, wie so:

<div data-role="content"> 
    <div class="tab-example__content"> 
     ... 
    </div> 
</div> 

Es ist jetzt schön glatt