css3回転遷移、最短の方法はありません

elbarto132

css3トランジションを使用して、phonegapを使用してコンパスの動きをスムーズにします。希望の回転を0から359までの角度として計算します。

問題は、たとえば359から0に移動する必要がある場合、時計回りに1度回転せず、代わりに反時計回りに359度回転することです。

cssにローテーションに常に最短の方法をとるように指示する方法はありますか?

thisiate

変換は、指示どおりに実行されます。

359度から始まり、1度になります。360度を1度に「ロールオーバー」することを検討しています。これは実際には361度です。変換遷移が機能する方法は、値の間を補間することです。

問題の解決策は、回転の角度を保持するカウンター変数を作成することです。

var rot = 0;  // lets start at zero, you can apply whatever later

回転を適用するには、値を変更します。

rot = 359;
// note the extra brackets to ensure the expression is evaluated before
//   the string is assigned this is require in some browsers
element.style.transform = ("rotate( " + rot + "deg )");

したがって、これを行う場合:

rot = 1;
element.style.transform = ("rotate( " + rot + "deg )");

戻ります。したがって、回転数に関係なく、360または0に近いかどうかを確認する必要があります。これを行うにelement.style.transformは、現在のrotだけの値を確認してから、新しいrotと比較します。ただし、存在する可能性のある回転数に関してこれを行う必要があるため、次のようになります。

var apparentRot = rot % 360;

これで、スピンがいくつあっても、その周囲がどれだけ離れているかがわかります。負の値は、値+360に等しくなります。

if ( apparentRot < 0 ) { apparentRot += 360; } 

これで、負の値が正規化され、正の回転(この場合は360度)または負の回転が必要かどうかを尋ねることができます。新しい回転値を0〜360度として指定しているように見えるので、これにより問題が単純化されます。新しい回転+360が、新しい回転自体よりも古い値に近いかどうかを確認できます。

var aR,          // what the current rotation appears to be (apparentRot shortened)
    nR,          // the new rotation desired (newRot)
    rot;         // what the current rotation is and thus the 'counter'

// there are two interesting events where you have to rotate through 0/360
//   the first is when the original rotation is less than 180 and the new one
//   is greater than 180deg larger, then we go through the apparent 0 to 359...
if ( aR < 180 && (nR > (aR + 180)) ) {
    // rotate back
    rot -= 360;
} 

//   the second case is when the original rotation is over 180deg and the new
//   rotation is less than 180deg smaller
if ( aR >= 180 && (nR <= (aR - 180)) ) {
    // rotate forward
    rot += 360;
}

これ以外にrot必要なのは、新しいローテーションの値をに追加することだけです。

rot += (nR - aR); //  if the apparent rotation is bigger, then the difference is
                  //  'negatively' added to the counter, so the counter is
                  //  correctly kept, same for nR being larger, the difference is
                  //  added to the counter

少しクリーンアップします。

var el, rot;

function rotateThis(element, nR) {
    var aR;
    rot = rot || 0; // if rot undefined or 0, make 0, else rot
    aR = rot % 360;
    if ( aR < 0 ) { aR += 360; }
    if ( aR < 180 && (nR > (aR + 180)) ) { rot -= 360; }
    if ( aR >= 180 && (nR <= (aR - 180)) ) { rot += 360; }
    rot += (nR - aR);
    element.style.transform = ("rotate( " + rot + "deg )");
}

// this is how to intialize  and apply 0
el = document.getElementById("elementYouWantToUse");
rotateThis(el, 0);

// now call function
rotateThis(el, 359);
rotateThis(el, 1);

カウンターは正または負になる可能性があります。問題ではありません。新しいローテーションには0〜359の値を使用してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

'height:fit-content'のCSS遷移はありません

分類Dev

要素がcss3の遷移に対して機能していません

分類Dev

スムーズな回転遷移CSS3?

分類Dev

Imagickjpgの背景は回転時に透明ではありません

分類Dev

d3は、遷移中の回転順序を変換します

分類Dev

CSS遷移:一方の変換プロパティであり、もう一方の変換プロパティではありません

分類Dev

最初のCSS遷移は再生されません

分類Dev

矢印間のCss3遷移

分類Dev

UnityBoxCollider2Dの回転はGameObjectの回転と同じではありません

分類Dev

3つのjsでの回転が正しくありません

分類Dev

CSS3 背景位置遷移

分類Dev

CSS 3D-立方体が横に回転し、90度回転すると親要素が表面上で誤って回転しますが、89.9度回転するとそうではありません

分類Dev

Juliaで3D配列を回転させる方法はありますか?

分類Dev

CSS3ボックス-影には奥行きがありません

分類Dev

CSS3は境界線がありません。つまり、線が隅で交わっていません。

分類Dev

CSS3は、上の要素を削除した後、要素をアニメーション化または所定の位置に遷移させます

分類Dev

回転する画像が3つありますが、最初の画像に戻って最初からやり直すことはありません。

分類Dev

単一のビューを回転させない方法はありますか?

分類Dev

疑似要素がメインアイテムの遷移終了まで待機した後のCSS3遷移

分類Dev

CSS遷移の中断は、同じ属性値では機能しません

分類Dev

ボタンのCSS遷移はDIV内では機能しません

分類Dev

要素はReactのcss遷移の状態変化に耐えられません

分類Dev

sf :: FloatRectを回転させる方法はありますか?

分類Dev

Blend2015に状態遷移効果がありません

分類Dev

画像のborder-radiusはcss遷移中に機能しません

分類Dev

divのCSS遷移はアニメーション化されません

分類Dev

speed.jsはCSS3遷移を実装できますか?

分類Dev

CSS遷移は `setTimeout`なしでは実行されません

分類Dev

CSS-遷移は疑似要素では機能しません

Related 関連記事

  1. 1

    'height:fit-content'のCSS遷移はありません

  2. 2

    要素がcss3の遷移に対して機能していません

  3. 3

    スムーズな回転遷移CSS3?

  4. 4

    Imagickjpgの背景は回転時に透明ではありません

  5. 5

    d3は、遷移中の回転順序を変換します

  6. 6

    CSS遷移:一方の変換プロパティであり、もう一方の変換プロパティではありません

  7. 7

    最初のCSS遷移は再生されません

  8. 8

    矢印間のCss3遷移

  9. 9

    UnityBoxCollider2Dの回転はGameObjectの回転と同じではありません

  10. 10

    3つのjsでの回転が正しくありません

  11. 11

    CSS3 背景位置遷移

  12. 12

    CSS 3D-立方体が横に回転し、90度回転すると親要素が表面上で誤って回転しますが、89.9度回転するとそうではありません

  13. 13

    Juliaで3D配列を回転させる方法はありますか?

  14. 14

    CSS3ボックス-影には奥行きがありません

  15. 15

    CSS3は境界線がありません。つまり、線が隅で交わっていません。

  16. 16

    CSS3は、上の要素を削除した後、要素をアニメーション化または所定の位置に遷移させます

  17. 17

    回転する画像が3つありますが、最初の画像に戻って最初からやり直すことはありません。

  18. 18

    単一のビューを回転させない方法はありますか?

  19. 19

    疑似要素がメインアイテムの遷移終了まで待機した後のCSS3遷移

  20. 20

    CSS遷移の中断は、同じ属性値では機能しません

  21. 21

    ボタンのCSS遷移はDIV内では機能しません

  22. 22

    要素はReactのcss遷移の状態変化に耐えられません

  23. 23

    sf :: FloatRectを回転させる方法はありますか?

  24. 24

    Blend2015に状態遷移効果がありません

  25. 25

    画像のborder-radiusはcss遷移中に機能しません

  26. 26

    divのCSS遷移はアニメーション化されません

  27. 27

    speed.jsはCSS3遷移を実装できますか?

  28. 28

    CSS遷移は `setTimeout`なしでは実行されません

  29. 29

    CSS-遷移は疑似要素では機能しません

ホットタグ

アーカイブ