如何使元素通过js和css过渡旋转而没有变量

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

我有一个网站,我希望某个元素在被点击后能够绕360度旋转一次。我听说过旋转div元素的唯一方法是CSS transform属性。我尝试了一些不同的操作,例如

    backward.classList.add("notrans");
    backward.style.transform = "rotateZ(0deg)";
    backward.classList.remove("notrans");
    backward.style.transform = "rotateZ(-360deg)";

notrans类使元素的转换时间为0秒,并且

backward.style.transition = "0s";
backward.style.transform = "rotateZ(0deg)";
backward.style.transition = transtime;
backward.style.transform = "rotateZ(360deg)";

这里是我现在正在使用的源代码:

var backward = document.getElementById("backward");

var Backward = function() {bgm.currentTime -= 10;
    backward.classList.add("notrans");
    backward.style.transform = "rotateZ(0deg)";
    backward.classList.remove("notrans");
    backward.style.transform = "rotateZ(-360deg)";
}
:root {
--color: black;
--hovercolor: white;
--backcolor: white;
--hoverbackcolor: black;
--transtime: 0.5s;
}

#controls {
position: absolute;
left: 0;
top: 45%;
width: 100%;
height: 30%;
font-size: 250%;
border: 1px solid var(--color);
border-radius: 20px;
overflow: hidden;
padding: 0;
background-color: var(--color);
}

.cp {
  height: 25%;
  width: 0;
  overflow: hidden;
  background-color: black;
}

.controls {
  position: absolute;
  top: 0;
  width: 25%;
  height: 100%;
  border: 1px solid var(--color);
  background-color: var(--backcolor);
  color: var(--color);
  line-height: 75%;
  transform: rotateZ(0deg);
  border-radius: 0;
  transition: color var(--transtime), background-color var(--transtime);
  text-align: center;
  padding: 5%;
}

.controls:hover {
  background-color: var(--hoverbackcolor);
  color: var(--hovercolor);
}

#pause {
  left: 25%;
  line-height: 100%;
}

#backward {
  left: 0;
  line-height: 100%;
}

#autoskip {
  right: 0;
}

#forward {
  right: 25%;
  line-height: 100%;
}

#autoskip {
  line-height: 150%;
}

#skipline {
  position: absolute;
  left: 0;
  top: 47.5%;
  background-color: red;
  height: 5%;
  width: 100%;
  transform: rotateZ(-45deg);
  transition: var(--transtime);
}
<!DOCTYPE html>
<html>

<body>
  <div id="controls">
    <div id="15" class="cp">
      <div id="backward" class="controls"><span class="rot"><span class = "button">&#8634;</span></span>
      </div>
    </div>
    <div id="22" class="cp">
      <div id="pause" class="controls"><span class="button">| |</span></span>
      </div>
    </div>
    <div id="33" class="cp">
      <div id="forward" class="controls"><span class="rot"><span class = "button">&#8635;</span></span>
      </div>
    </div>
    <div id="44" class="cp">
      <div id="autoskip" class="controls"><span class="button">&#9193;</span>
        <div id="skipline"></div>
      </div>
    </div>
  </div>
</body>

</html>

如您所见,向后按钮在按下时没有旋转。

有帮助吗?

FYI:代码段中有很多额外的内容,例如CSS变量,但这些是必需的。

javascript css css-transitions
1个回答
0
投票

您是否想要这种行为?

var spinner = document.querySelector("#spinner");
document.querySelector("button").onclick = function() {
  spinner.style.animationName = "example";
  setTimeout(function() {
    spinner.style.animationName = "";
  }, 4000);
};
#spinner {
  width: 100px;
  height: 100px;
  display: flex;
  flex-wrap: wrap;
  background-color: red;
  border-radius: 50%;
  overflow: hidden;
  animation-duration: 4s;
  animation-iteration-count: infinite;
  position: relative;
  justify-content: center;
  align-items: center;
}

#spinner div {
  width: 50%;
  height: 50%;
}

#spinner button {
  position: absolute;
  cursor: pointer;
}

.blue {
  background-color: blue;
}

.green {
  background-color: green;
}

.red {
  background-color: red;
}

.yellow {
  background-color: yellow;
}

@keyframes example {
  0%   {transform: rotate(0deg)}
  100% {transform: rotate(360deg)}
}
<div id="spinner">
  <div class="blue"></div>
  <div class="red"></div>
  <div class="green"></div>
  <div class="yellow"></div>
  <button>Spin</button>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.