存在过渡延迟时CSS矩阵旋转的控制方向

问题描述 投票:-1回答:1

我正在使用CSS 2D转换矩阵来旋转图像。实际旋转很好。问题是当您向转换添加过渡时。

此plnkr显示了问题。http://next.plnkr.co/edit/6BKBawfUa9NUXlVY?preview

**编辑**该代码笔使其更加清晰。单击旋转按钮,并注意旋转方向

https://codepen.io/realview-the-bold/pen/KKwrLPP

CSS转换代码为:

.rotate {
  
  transition: transform 0.5s;
  
}

[每次单击旋转时,它将图像旋转90度。旋转4周后,您将返回到原始旋转。

我期望过渡以顺时针方式进行,但是从180到270,过渡是逆时针。

[请注意,我需要一个使用矩阵而不是rotate(Ndeg)变换的解决方案。

谢谢

css css-transitions css-transforms css-matrix
1个回答
-1
投票

我希望这是您的期望。

matrix()的语法:

矩阵(a,b,c,d,tx,ty)

a b c d-是<number>描述线性变换。

tx ty-是<number>描述要应用的翻译。

矩阵的初始条件,

(即,在0度处-a和d的值将为1,因此maxtrix = [1,0,0,1,0,0]] >>

如果朝顺时针方向旋转:

在90度时,b = 1且c = -1的值,因此[0,1,-1,0,0,0]

在180度时-a = -1且b = -1的值,因此[-1,0,0,-1,0,0]

在270度-在[0,-1,1,0,0,0]之前b = -1和c = 1的值

您还可以使用dom样式转换属性来执行此操作。

   img.style.transform = "matrix(0, 1, -1, 0, 0, 0)";

<!doctype html>

<html>

<head>
  <link rel="stylesheet" href="lib/style.css">
  <script>
    var currentRotation = 0;

    function showRotationState() {
      document.getElementById("rotateState").innerHTML = `Current rotation is ${currentRotation}`
    }

    function rotate() {
      let matrix = []
      console.log(currentRotation);
      let img = document.getElementById("img");

      if (currentRotation == 0) {
        matrix = [0, 1, -1, 0, 0, 0];

        //img.style.transform = "matrix(0, 1, -1, 0, 0, 0)";
        currentRotation = 90;
      } else if (currentRotation == 90) {
        matrix = [-1, 0, 0, -1, 0, 0];
        //img.style.transform = "matrix(-1, 0, 0, -1, 0, 0)";
        currentRotation = 180;

      } else if (currentRotation == 180) {
        matrix = [0, -1, 1, 0, 0, 0];
        //img.style.transform = "matrix(0, -1, 1, 0, 0, 0)";

        currentRotation = 270;
      } else if (currentRotation == 270) {
        matrix = [1, 0, 0, 1, 0, 0];
        // img.style.transform = "matrix(1, 0, 0, 1, 0, 0)";
        currentRotation = 0;
      }
      showRotationState();
      img.style.transform = `matrix(${matrix.toString()})`;


    }
  </script>
</head>

<body onload="showRotationState()">
  <button onclick="rotate()">rotate</button><br><br>
  <div id="rotateState"></div>
  <img id="img" class="rotate" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSCp-PuCnhjtoiAueYMVI9Pw0yz-819jQTavGj8hhlkZrzwkMYG&s" width="300">
</body>

</html>
© www.soinside.com 2019 - 2024. All rights reserved.