Mein Ziel ist es, eine gleitende Animationen zu machen, um zwischen zwei Divs zu wechseln. Hier ist, was ich bisher:Schieben Sie zwei Divs gleichzeitig mit CSS-Animationen
var current = $('#blue');
var other = $('#red');
function slider($elem_in, $elem_out) {
$elem_in.show();
// reset the animations
$elem_in.css('animation', '');
$elem_out.css('animation', '');
// remove the previous event handler
$elem_in.off('animationend');
// make the elem_out slide out
$elem_out.css('animation', 'slideLeftOut 1s ease');
$elem_out.on('animationend', function() {
$elem_in.css('animation', 'slideLeftIn 1s ease');
$elem_out.hide();
});
}
$('#container').on('click', function() {
slider(other, current);
// invert the two variables
other = [current, current = other][0];
})
#container {
width: 100px;
height: 100px;
overflow: hidden;
border: 1px solid black;
}
#container div {
height: 100%;
width: 100%;
}
#red {
background: red;
}
#blue {
background: blue;
}
/* slide to the left in */
@keyframes slideLeftIn {
0% {
transform: translateX(150%);
}
100% {
transform: translateX(0%);
}
}
/* slide to the left out */
@keyframes slideLeftOut {
0% {
transform: translateX(0%);
}
100% {
transform: translateX(-150%);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<div id="blue"></div>
<div id="red"></div>
</div>
Es gibt zwei Probleme mit diesem, das ich versuche zu lösen:
Wenn ich auf und
current
ist$('#red')
, Es wird blau, bevor die Animation abgespielt wird. Wenncurrent
jedoch$('blue')
ist, funktioniert die Animation einwandfrei.Ist es möglich, nicht den Leerraum zwischen den divs zu haben, wenn sie gleiten? Ich habe versucht, die
$elem_in.css('animation', 'slideLeftIn 1s ease');
outisde des Ereignishandlers zu bewegen, aber in diesem Fall die Animation überhaupt nicht spielen.
Ich habe die ähnlichen Fragen wie this one gesehen, aber die Antwort verwendet absolute Positionierung und ich möchte stattdessen mein Ziel mit CSS-Übergängen erreichen.
1. Scheint verwandt zu sein, wo das Element im Dom platziert ist. Vielleicht nach der Animation das versteckte Element nach dem sichtbaren plazieren? – yezzz