2017-05-18 1 views
0

Ich arbeite an einer einfachen Sidebar, die geöffnet wird, wenn der Benutzer auf die Schaltfläche klickt und wenn es geöffnet ist, möchte ich etwas Text neben den Symbolen anzeigen.Text springt auf, wenn er ausgeblendet oder angezeigt wird

Wenn ich jedoch die Seitenleiste öffne und versuche, den Text fadeIn() oder der Text, springt es auf und erstellt einen unerwünschten Effekt der Erweiterung und Deflation der Sidebar, während die Sidebar selbst erweitert wird.

Gibt es eine Möglichkeit, diesen Text neben dem Symbol anstelle des Jumping-Effekts erscheinen zu lassen?

Ich nehme an, es ist wegen des Timings, aber ich bin mir nicht sicher, wie ich es lösen kann und ich würde lieber nicht setTimeout();

https://jsfiddle.net/dqf8byn9/

Antwort

1

Sie könnten versuchen, den Text erst, nachdem die Seitenleiste erweitert zeigt. animate() kann eine Funktion ausführen, wenn sie als Argument abgeschlossen ist. Versuchen Sie, Ihren Code zu ändern, wie so:

$('.sidebar').animate({ width: '200px' }, 400, "swing", function(){ $('span').removeClass('hidden'); });

400 und "swing" die Standardwerte für die Dauer und Lockerungen sind.

+0

Während dies eine Möglichkeit ist, erlaubt meine Version, dass das JavaScript immer noch fast gleich bleibt (mit kleinen Änderungen, genauso wie der Startcode nicht perfekt war), da es eine Zeile CSS verwendet, um das Problem zu beheben. – Daniel

0

Hinzufügen white-space:nowrap; zum .sidebar a Wähler würde das Problem beheben. Es würde auch ermöglichen, dass Sie die Seitenleiste so breit oder schmal wie Sie möchten.

Dieser Codeausschnitt zeigt, wie der Code funktioniert.

$('.sidebar-toggle').click(function() { 
 
    if ($(this).hasClass('active')) { 
 
    $(this).removeClass('active'); 
 
    $('.sidebar').stop().animate({ 
 
     width: '50px' 
 
    }); 
 
    $('span').stop().fadeOut(); 
 
    } else { 
 
    $(this).addClass('active'); 
 
    $('.sidebar').stop().animate({ 
 
     width: '200px' 
 
    }); 
 
    $('span').stop().fadeIn(); 
 
    } 
 
});
.sidebar { 
 
    width: 50px; 
 
    background: #ddd; 
 
} 
 

 
.sidebar a { 
 
    display: block; 
 
    white-space: nowrap; 
 
} 
 

 
span { 
 
    position: relative; 
 
    top: -1em; 
 
    left: 1em; 
 
} 
 

 
.hidden { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="sidebar"> 
 
    <a class="sidebar-toggle"> 
 
    <img src="http://placehold.it/30x30" /> 
 
    <span class="hidden">Test</span> 
 
    </a> 
 
    <a> 
 
    <img src="http://placehold.it/30x30" /> 
 
    <span class="hidden">Test</span> 
 
    </a> 
 
    <a> 
 
    <img src="http://placehold.it/30x30" /> 
 
    <span class="hidden">Test</span> 
 
    </a> 
 
</div>

+0

Ich änderte es auf 75px in der Geige, aber wenn Sie es ein paar Mal ausführen, können Sie sehen, dass es immer noch das gleiche Problem hat. Ich würde trotzdem gerne die Seitenleiste schlank halten, so dass es in meinem Fall nicht die beste Lösung ist. –

+0

@ Mr.Smithyyy Ich habe auch den Code mit Fading im Text arbeiten, um den Übergang etwas schön aussehen zu lassen. Ich änderte die Farbe des Hintergrunds, um es einfacher zu sehen, was passiert – Daniel

+0

@ Mr.Smithyyy Wenn Sie sich mein aktuelles Code-Snippet ansehen, funktioniert es mit dem Container so klein wie Sie möchten mit dem schönen Einblendeffekt auf den Text. Nur Leerzeichen hinzufügen: nowrap; bis zum Anker Tag funktioniert perfekt. – Daniel

Verwandte Themen