WebアニメーションAPIを使用して追加アニメーションをシミュレートする必要があります。Webアニメーションを使用した追加アニメーションのシミュレーションgetComputedStyle(要素).transformのAPI問題
documentationに記載されているように、追加アニメーションはまだサポートされておらず、getComputedStyle(element)
の使用が推奨されています。
getComputedStyle(element).transform
によって返されたmatrix3dには、おそらくパースペクティブな情報が含まれていない可能性があるため、開始キーフレームとして使用している場合、アニメーションは同じではありません(赤いボックスの問題)。この例では
、青いボックスは、所望のアニメーションを持って、赤いボックスアニメーションが正しくない:
Iは知りたい: - この問題に対する解決策は が存在する場合 - 添加アニメーションの実装場合transform
をperspective
でサポートします。
お時間をいただきありがとうございます。
var elem = document.getElementById('target');
var style = window.getComputedStyle(elem);
elem.animate([{
transform: style.transform // using matrix3d returned from getComputedStyle()
}, {
transform: 'rotateY(179deg) scaleZ(2) translateZ(200px)'
}], {
duration: 3000
});
var elem2 = document.getElementById('target2');
elem2.animate([{
transform: 'rotateY(-179deg) scaleZ(2) translateZ(200px)'
}, {
transform: 'rotateY(179deg) scaleZ(2) translateZ(200px)'
}], {
duration: 3000
});
#wrapper,
#wrapper2 {
perspective: 1000px;
}
#target,
#target2 {
position: absolute;
top: 100px;
width: 200px;
height: 300px;
}
#target {
left: 100px;
background-color: red;
transform: rotateY(-179deg) scaleZ(2) translateZ(200px);
}
#target2 {
left: 400px;
background-color: blue;
transform: rotateY(-179deg) scaleZ(2) translateZ(200px);
}
<div id="wrapper">
<div id="target">wrong animation</div>
</div>
<div id="wrapper2">
<div id="target2">correct animation</div>
</div>
一部は、マトリックスを使用したアニメーションが179degに181degから行くことのようですので-179deg'もある(181deg' 'と考えることができます'ためと考えられます-179度から179度までの回転(これは358度のスイング)とは異なり、目には明白でない可能性がある非常に小さい回転です。したがって、行列を使用する場合は、最初の回転を181degに設定し、0deg回転の中間キーフレームを追加して、アニメーションが181degから179degになるようにします。 [Here](https://jsfiddle.net/pgf24u30/1/)は私が言っていることのデモです。 – Harry
しかし、あなたが見ることができるように、それはまだ100%正確に見えません。赤色のボックスは、青色のものほど左に動かないので、多少の修正が必要になることがあります。これが少しでも役に立ったら、私はそれを答えとして加えることができます。 – Harry
@harry私はすでに前の質問にこの行の何かに答えました:http://stackoverflow.com/q/41589653/1926369 – vals