2015-09-30 14 views
7

Ich versuche die slideUp()/slideDown() zu verwenden, um die Offenbarung eines Seitenelements zu animieren, hatte aber Probleme mit einem relativ positionierten Symbol mit einem Negativ (außerhalb des Elements)) Platzierung. Während diese Animationen ausgeführt werden, wird der Überlauf auf das ausgeblendete Rendering gesetzt. Mein Symbol wird halbiert, bis die Animation abgeschlossen ist.Horizontaler Überlauf mit slideDown()/slideUp()

The JSFiddle here veranschaulicht mein Problem. Ich brauche den horizontalen Überlauf der blauen Box, um während der gesamten Ausführung der Animation sichtbar zu sein, anstatt magisch am Ende zu erscheinen. Ich brauche auch den vertikalen Überlauf, um versteckt zu bleiben.

ich Änderung habe versucht,

$(this).parent().find("div:eq(0)").slideDown(1000).css("overflow-x", "visible"); 

aber es scheint, ignoriert und unter Verwendung werden

$(this).parent().find("div:eq(0)").slideDown(1000).css("overflow", "visible"); 

macht auch die vertikale Überlauf sichtbar.

Jeder Einblick würde sehr geschätzt werden.

Antwort

8

wickeln Sie Ihre divs wie: div.clickEvent in andere div.hide

<div class="hide"><div class="clickEvent"> 
... 
</div> 

https://jsfiddle.net/h9gtzp6f/37/

+1

Im eigentlichen Projekt arbeite ich es Mehrere Elternelemente über dem Div alle mit den gleichen Breitenangaben. Müsste ich nicht auch diese Elternelemente umhüllen? Ich bin besorgt, dies würde zu unerwünschten Nebenwirkungen führen. –

+1

E. Allison das Problem kommt aus keiner Breite. Es ist einfach, wie der Animationsprozess funktioniert. Wenn Sie die Wrap-Lösung wirklich verwenden, lassen Sie den Browser diese Breite verarbeiten. Also habe ich verstanden, dass Sie eine Art wiederverwendbare Komponente haben, also müssen Sie sie nur in ein weiteres div einpacken, das ist alles. –

+0

Da die übergeordneten Elemente dieselbe Satzbreite haben, funktioniert das Festlegen der Breite des Containers auf 100% nicht, da die Breite des übergeordneten Elements übernommen wird. [Siehe hier] (https://jsfiddle.net/edallison/h9gtzp6f/35/). –

4

starten:

$('.clickMe').toggle(function() { 
    var div = $(this).parent().find("div:eq(0)").show(); 
    var parent = div.parent(); 
    var wrapper = $('<div>', {'class': 'hide wrapper', html: div}); 
    parent.append(wrapper); 
    wrapper.slideDown({duration:1000, complete: function(){parent.append(div);wrapper.remove();}}); 
}, function() { 
    var div = $(this).parent().find("div:eq(0)"); 
    var parent = div.parent(); 
    var wrapper = $('<div>', {'class': 'wrapper', html: div}); 
    parent.append(wrapper); 
    wrapper.slideUp({duration:"fast", complete: function(){parent.append(div);wrapper.remove();div.hide()}}); 
}); 
+1

Es ist das gleiche wie ich bereits (Wrapping-Lösung :) :) –

+0

Yeah, habe ich begann zu posten, bevor Ihre Lösung da war. Ich denke, sie sind verschiedene Ansätze für die gleiche Lösung und es kann nicht schaden, mehr Optionen zu haben – user2704238