首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CSS动画在单击事件上滑动菜单

使用CSS动画在单击事件上滑动菜单
EN

Stack Overflow用户
提问于 2016-07-15 15:58:42
回答 2查看 1.7K关注 0票数 0

我正在尝试创建一个菜单,该菜单将在单击事件上滑出,然后当再次单击该元素时,该菜单将滑回。

这是我所拥有的代码。http://codepen.io/anon/pen/wWpjWa

而js,这就是问题所在:

代码语言:javascript
复制
 $('#menu-link').click(function(){
     $('#menu-link').toggleClass('slideIn');
     $('nav').toggleClass('slideIn');
     $('#menu-link').toggleClass('slideOut');
     $('nav').toggleClass('slideOut');
 });

自然,这两种动画都是同时推出的。

我知道这里的问题是它同时切换slideIn和slideOut类。解决方案可以是将slideOut类添加到元素中。但这将在任何事件发生之前启动一次动画。我经历过各种解决办法,但都不太管用。我知道这很简单,我只是想不出怎么解决。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-15 16:02:31

您需要通过检查它上的类来检查它是否已经退出(使用hasClass() )。

代码语言:javascript
复制
$('#menu-link').click(function(){
  if( $("#menu-link").hasClass("slideIn") )
    {
      $('#menu-link').toggleClass('slideOut');
      $('nav').toggleClass('slideOut');  
    }
    else
    {
      $('#menu-link').toggleClass('slideIn');
      $('nav').toggleClass('slideIn');    
    }  
});
代码语言:javascript
复制
body {
  font-family: 'Roboto', 'Helvetica', sans-serif;
}

h1 {
  font-size: 3rem;
  font-weight: 700;
}

.wrapper {
  padding: 4rem;
  width: 70%;
  height: 100%;
  margin: 0 auto;
}

nav {
  height: 100%;
  background: #3385ff;
  width: 300px;
  position: fixed;
  left: -300px;
  border: none;
}

a,
a:hover,
a:visited {
  color: white;
  text-decoration: none;
}

ul {
  width: 50%;
  margin: 0 auto;
  list-style: none;
  font-size: 1.7rem;
}

li {
  text-align: center;
  padding-top: 70%;
}

#menu-link {
  position: absolute;
  color: #3385ff;
  padding: 10px;
  font-size: 4rem;
}


/*ANIMATIONS*/

.slideIn {
  animation: menuSlide .5s 1;
  animation-fill-mode: forwards;
}

.slideOut {
  animation: menuSlideOut .5s 1;
}

/*Keyframes*/

@keyframes menuSlide {
  from {
    transform: translateX(0px);
    transition-timing-function: ease-in;
  }
  to {
    transform: translateX(300px);
    transition-timing-function: ease-out;
  }
}

@keyframes menuSlideOut {
  from {
    transform: translateX(300px);
    transition-timing-function: ease-in;
  }
  to {
    transform: translateX(0px);
    transition-timing-function: ease-out;
  }
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<header>
  <nav role="navigation">

  </nav>
  <a href="#" id="menu-link">&#9776;</a>
</header>

<main>
</main>

票数 4
EN

Stack Overflow用户

发布于 2016-07-15 16:47:02

试试这个人:

代码语言:javascript
复制
$('#menu-link').click(function(){
  var menuActive = $('#menu-link').data('active');

  if(menuActive) {
    $('#menu-link').toggleClass('slideOut');
    $('nav').toggleClass('slideOut');
    $('#menu-link').removeClass('active');
 } else { 
    $('#menu-link').toggleClass('slideIn');
    $('nav').toggleClass('slideIn');
    $('#menu-link').data('active', true);
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38400495

复制
相关文章

相似问题

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