首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过javascript在单击上触发CSS动画

通过javascript在单击上触发CSS动画
EN

Stack Overflow用户
提问于 2020-08-07 14:24:06
回答 2查看 2.8K关注 0票数 1

我有一个简单的汉堡包图标,我想通过纯javascript触发CSS动画(请不要使用jquery )。我是通过添加和删除汉堡包图标上的一个类来实现的,当我添加CSS动画的类时,但是当我删除这个类时,动画不会发生,汉堡包线在没有动画的情况下突然回来。基本上,我希望动画反转,回到原来的位置。

以下是代码:

代码语言:javascript
复制
var hamburgerMenu = document.querySelector('.hamburger-menu');
hamburgerMenu.addEventListener('click', function() {
  var hamburgerMenuSpan2 = document.querySelector('.hamburger-second');

  hamburgerMenuSpan2.classList.toggle('hamburger-line-2');
});
代码语言:javascript
复制
.hamburger-menu {
  position: absolute;
  top: 20px;
  right: 20px;
}

.hamburger-line-2 {
  animation-name: animate;
  animation-duration: 3s;
  animation-timing-function: ease-in-out;
  animation-fill-mode: forwards;
  animation-direction: alternate;
}

@keyframes animate {
  0% {
    width: 40px;
  }
  100% {
    width: 0px;
  }
}

.hamburger-menu span {
  display: block;
  width: 40px;
  height: 2px;
  background: black;
  margin: 10px 0px;
}
代码语言:javascript
复制
<div class="hamburger-menu">
  <span class="hamburger-line-1"></span>
  <span class="hamburger-second"></span>
  <span class="hamburger-line-3"></span>
</div>

基本上,我希望汉堡包图标行成为0px宽度,点击的持续时间,然后每当用户再次点击,我希望汉堡包图标线成为原来的宽度从0开始。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-07 14:34:38

有点丑,因为需要额外的类,但是它很有用:

代码语言:javascript
复制
var hamburgerMenu = document.querySelector('.hamburger-menu');
hamburgerMenu.addEventListener('click', function() {
  var hamburgerMenuSpan2 = document.querySelector('.hamburger-second');

  if (hamburgerMenuSpan2.classList.contains("animate-out")) {
    hamburgerMenuSpan2.classList.remove("animate-out");
    hamburgerMenuSpan2.classList.add("animate-in");
  } else {
    hamburgerMenuSpan2.classList.add("animate-out");
    hamburgerMenuSpan2.classList.remove("animate-in");
  }

});
代码语言:javascript
复制
.hamburger-menu {
  position: absolute;
  top: 20px;
  right: 20px;
}

.hamburger-line-2 {
  animation-duration: 3s;
  animation-timing-function: ease-in-out;
  animation-fill-mode: forwards;
  animation-direction: alternate;
}

.animate-out {
  animation-name: animate-out;
}

.animate-in {
  animation-name: animate-in;
}

@keyframes animate-out {
  0% {
    width: 40px;
  }
  100% {
    width: 0px;
  }
}

@keyframes animate-in {
  0% {
    width: 0px;
  }
  100% {
    width: 40px;
  }
}

.hamburger-menu span {
  display: block;
  width: 40px;
  height: 2px;
  background: black;
  margin: 10px 0px;
}
代码语言:javascript
复制
<div class="hamburger-menu">
  <span class="hamburger-line-1"></span>
  <span class="hamburger-second hamburger-line-2"></span>
  <span class="hamburger-line-3"></span>
</div>

票数 4
EN

Stack Overflow用户

发布于 2020-08-07 14:53:32

如果您可以自由地使用CSS transition,那么这可能是一个很好的解决方案。

代码语言:javascript
复制
var hamburgerMenu = document.querySelector('.hamburger-menu');
hamburgerMenu.addEventListener('click', function() {
  var hamburgerMenuSpan2 = document.querySelector('.hamburger-second');

  if (hamburgerMenuSpan2.classList.contains('low-width')) {
    hamburgerMenuSpan2.classList.remove('low-width');
  } else {
    hamburgerMenuSpan2.classList.add('low-width');
  }
});
代码语言:javascript
复制
.hamburger-menu {
  position: absolute;
  top: 20px;
  right: 20px;
}

.hamburger-second {
  transition: width 3s ease-in-out;
}

.low-width {
  width: 0px !important;
}

.hamburger-menu span {
  display: block;
  width: 40px;
  height: 2px;
  background: black;
  margin: 10px 0px;
}
代码语言:javascript
复制
<div class="hamburger-menu">
  <span class="hamburger-line-1"></span>
  <span class="hamburger-second"></span>
  <span class="hamburger-line-3"></span>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63303763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档