1

我的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>

4

1 回答 1

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)'});
})
于 2016-05-16T17:55:00.230 回答