Hmmm, przyglądałem się temu problemowi od dłuższego czasu i nie sądzę, że jest to możliwe przy użyciu animacji CSS. Próbuję z this JSFiddle wiele różnych rzeczy i działa through tutorialsabout CSS Animations (widząc, jeśli ktoś wspomina ten sam problem), a także other informationabout it.
Potem doszedłem do realizacji tego, co próbujesz osiągnąć i myślę, że może jest łatwiejsze rozwiązanie. JEŚLI lokalizacje są obliczane dynamicznie, zakładam, że rzeczywiście używasz jakiegoś poziomu Javascript (lub jakiejś szalonej zaawansowanej metody obliczania CSS), więc przynajmniej pomyślałem, że ustawisz styl elementu DOM z nowymi pozycjami left
lub top
. Chociaż nie mówię o animacji jQuery, zamiast tego można użyć CSS3 Transitions w połączeniu z Javascriptem. Oznacza to, że zyskujesz niektóre zalety animacji CSS, takie jak obliczenia, które są bardziej natywne (sprzęt przyspieszony), a nie robione w JavaScript, ale tracisz na kilku rzeczach.
Co najważniejsze, nie ma żadnych zdarzeń przejściowych dla przeglądarki like there is for CSS Animations, ani nie można kontrolować drobnych elementów nad klatkami kluczowymi, ale można z nimi pracować dynamicznie. Proponuję tylko, aby twoje pytanie odnosiło się tylko do klatki kluczowej 0%
i jednej z 100%
.
Problem z tym, co próbujesz zrobić, polega na tym, że używanie animacji CSS musi być statyczne i nie będzie ciągnąć wartości, które były ustawione do animacji (w przeciwieństwie do przejść). Podczas korzystania z inherit
, faktycznie próbujesz zrobić to używać top
i left
itp. from it's parent.
Ponownie, to nie spełnia twojego wymogu czystego CSS, ale używanie CSS Transitions oznacza tylko ograniczone manipulowanie DOM przez JavaScript, a nie to, co robi jQuery.
Oto another JSFiddle przy użyciu jQuery (tylko bardzo podstawowy javascript do ustawienia klasy lub style inline) i CSS Transitions.
HTML
<div class="myselector-one" id="a">Click Me</div>
<div class="myselector-two" id="b">Click Me</div>
JavaScript
document.getElementById("a").onclick = function()
{
if (this.className.indexOf("animate-complete")!=-1)
{
this.className = this.className.replace(/animate\-complete/g,"");
}
else
{
this.className += " animate-complete";
}
}
var bIsTransitioned = false;
document.getElementById("b").onclick = function()
{
if (!bIsTransitioned)
{
this.style.top = "50%";
this.style.left = "50%";
this.style.width = "100%";
this.style.height = "60%";
}
else
{
this.style.top = "";
this.style.left = "";
this.style.width = "";
this.style.height = "";
}
bIsTransitioned = !bIsTransitioned;
}
CSS
.myselector-one {
top:10em;
left:0em;
width:10em;
height:5em;
transition:all 2s;
background-color:#ffaa99;
position:absolute;
}
.myselector-two {
top:4em;
left:30em;
width: 15em;
height: 8em;
transition:all 2s;
background-color:#aaff99;
position:absolute;
}
.animate-complete
{
top: 50%;
left:50%;
width: 100%;
height: 60%;
}
Hi Jožko, udało ci się znaleźć czystego roztworu CSS3? Jakiekolwiek możliwe obejście dla obsługi rozszerzenia wartości właściwości do wielu animacji CSS? –