仅在类切换时顺时针转换

时间:2016-05-16 12:47:04

标签: css3 rotateanimation

我的toggled类在分配时顺时针旋转180度。当toggled类移除时,如何修改我的css以顺时针将元素从180度旋转到0度?

var el = document.getElementById("wrapper");
el.addEventListener("click", function(){
  this.classList.toggle("toggled");
});
#wrapper {
  position: relative;
  top: 20px;
  left: 20px;
  padding: 10px;
  cursor: pointer;
  display: inline-block;
}

#wrapper.toggled {
  transform: rotateZ(180deg);
}

#wrapper > div {
  width: 35px;
  height: 3px;
  margin-bottom: 10px;
  background-color: #3f51b5;
}

#wrapper > div:last-child {
  margin-bottom: 0;
}

#wrapper, #wrapper > div {
  transition-property: transform;
  transition-duration: 0.5s;
  transition-timing-function: cubic-bezier(0.35, 0, 0.25, 1);
}

#wrapper.toggled >div:first-child {
  transform: rotateZ(45deg) rotateY(45deg) translateX(14px) translateY(-3px);
}

#wrapper.toggled >div:last-child {
  transform: rotateZ(-45deg) rotateY(45deg) translateY(3px) translateX(14px);
}
<div id="wrapper">
  <div></div>
  <div></div>
  <div></div>
</div>

1 个答案:

答案 0 :(得分:1)

我对您的脚本和样式进行了一些编辑,它运行良好:https://jsfiddle.net/IA7medd/rkk0zc8k/

HTML:

<div id="wrapper">
  <div></div>
  <div></div>
  <div></div>
</div>

的CSS:

#wrapper {
  position: relative;
  top: 20px;
  left: 20px;
  padding: 10px;
  cursor: pointer;
  display: inline-block;
  transform: rotateZ(0deg);
}

#wrapper > div {
  width: 35px;
  height: 3px;
  margin-bottom: 10px;
  background-color: #3f51b5;
}

#wrapper > div:last-child {
  margin-bottom: 0;
}

#wrapper, #wrapper > div {
  transition-property: transform;
  transition-duration: 0.5s;
  transition-timing-function: cubic-bezier(0.35, 0, 0.25, 1);
}

#wrapper.toggled >div:first-child {
  transform: rotateZ(45deg) rotateY(45deg) translateX(14px) translateY(-3px);
}

#wrapper.toggled >div:last-child {
  transform: rotateZ(-45deg) rotateY(45deg) translateY(3px) translateX(14px);
}

.animated {
    -webkit-animation-duration: 0.5s;
       -moz-animation-duration: 0.5s;
         -o-animation-duration: 0.5s;
            animation-duration: 0.5s;
    -webkit-animation-fill-mode: both;
       -moz-animation-fill-mode: both;
         -o-animation-fill-mode: both;
            animation-fill-mode: both;
}

.animated.notAnimated {
    -webkit-animation-duration: 0s;
       -moz-animation-duration: 0s;
         -o-animation-duration: 0s;
            animation-duration: 0s;
}

@-webkit-keyframes rotate180 {
    0%{transform: rotateZ(0deg);}
    100% {transform: rotateZ(180deg);}
}

@-moz-keyframes rotate180 {
    0%{transform: rotateZ(0deg);}
    100% {transform: rotateZ(180deg);}
}

@-o-keyframes rotate180 {
    0%{transform: rotateZ(0deg);}
    100% {transform: rotateZ(180deg);}
}

@keyframes rotate180 {
    0%{transform: rotateZ(0deg);}
    100% {transform: rotateZ(180deg);}
}

.animated.rotate180 {
    -webkit-animation-name: rotate180;
    -moz-animation-name: rotate180;
    -o-animation-name: rotate180;
    animation-name: rotate180;
}

@-webkit-keyframes rotate360 {
    0%{transform: rotateZ(180deg);}
    100% {transform: rotateZ(360deg);}
}

@-moz-keyframes rotate360 {
    0%{transform: rotateZ(180deg);}
    100% {transform: rotateZ(360deg);}
}

@-o-keyframes rotate360 {
    0%{transform: rotateZ(180deg);}
    100% {transform: rotateZ(360deg);}
}

@keyframes rotate360 {
    0%{transform: rotateZ(180deg);}
    100% {transform: rotateZ(360deg);}
}

.animated.rotate360 {
    -webkit-animation-name: rotate360;
    -moz-animation-name: rotate360;
    -o-animation-name: rotate360;
    animation-name: rotate360;
}

@-webkit-keyframes rotate0 {
    0%{transform: rotateZ(360deg);}
    100% {transform: rotateZ(0deg);}
}

@-moz-keyframes rotate0 {
    0%{transform: rotateZ(360deg);}
    100% {transform: rotateZ(0deg);}
}

@-o-keyframes rotate0 {
    0%{transform: rotateZ(360deg);}
    100% {transform: rotateZ(0deg);}
}

@keyframes rotate0 {
    0%{transform: rotateZ(360deg);}
    100% {transform: rotateZ(0deg);}
}

.animated.rotate0 {
    -webkit-animation-name: rotate0;
    -moz-animation-name: rotate0;
    -o-animation-name: rotate0;
    animation-name: rotate0;
}

脚本:

var el = document.getElementById("wrapper");

var counter = 1;
el.addEventListener("click", function(){

    this.classList.toggle("toggled");
  if(counter > 2){
    counter = 1;
    this.classList.toggle("rotate360");
  }
  if(counter == 1){
    this.classList.toggle("rotate180");
  }
  else if(counter == 2){
    this.classList.toggle("rotate180");
    this.classList.toggle("rotate360");
  }
  counter++;

});

另一种解决方案:

这是另一种选择,但使用jquery:https://jsfiddle.net/IA7medd/pr9akayk/

在选项中,您只需要像这样更改脚本:

var currentRotate = 0;
var $el = $("#wrapper");


$('#wrapper').click(function(){
    currentRotate+=180;
    $(this).toggleClass('toggled');
  $el.css({ WebkitTransform: 'rotate(' + currentRotate + 'deg)'});
  $el.css({ '-moz-transform': 'rotate(' + currentRotate + 'deg)'});
})