Vue.js:切换汉堡菜单图标

Posted

技术标签:

【中文标题】Vue.js:切换汉堡菜单图标【英文标题】:Vue.js: toggle hamburger menu icons 【发布时间】:2018-08-10 09:55:54 【问题描述】:

我有一个带有汉堡菜单图标的标题,当我单击它时,我想将其更改为十字图标。如何在 Vue 模板中做到这一点?我在计算属性中创建了一个函数,但我不确定我应该做什么。

这是我的菜单图标:

<div class="top-icon" :class="toggleTopMenu" @click="showTopMenu = !showTopMenu">
  <div class="main-item menu">
    <span class="line line01"></span>
    <span class="line line02"></span>
    <span class="line line03"></span>
  </div>
</div>

这是我的 CSS:

.top-icon 
  background: #29afd1;
  display: inline-block;
  border-radius: 500px;
  margin: 10px;
  position: relative;
  padding: 80px;
  cursor: pointer;


.main-item 
  width: 150px;
  height: 150px;
  position: relative;


.line 
  position: absolute;
  height: 15px;
  width: 100%;
  background: white;
  border-radius: 10px;
  transition: all cubic-bezier(0.25, 0.1, 0.28, 1.54) 0.32s;


.line01 
  top: 19%;


.line02 
  top: 49%;


.line03 
  top: 79%;


.menu.close .line01 
  transform: rotate(45deg);
  top: 49%;


.menu.close .line02, .menu.close .line03 
  transform: rotate(-45deg);
  top: 49%;

到目前为止,这是我在脚本标签中的内容:

data() 
  return 
    showTopMenu: false,
  ;
,
computed: 
toggleTopMenu() ,

【问题讨论】:

【参考方案1】:

你的意思是这种实现吗? 我刚刚在您的代码中添加了v-ifv-else

请检查下面的sn-p:

new Vue(
  el: "#app",
  data: 
    showTopMenu: false,
  
)
.top-icon 
  background: #29afd1;
  display: inline-block;
  border-radius: 500px;
  margin: 10px;
  position: relative;
  padding: 80px;
  cursor: pointer;


.main-item 
  width: 150px;
  height: 150px;
  position: relative;


.line 
  position: absolute;
  height: 15px;
  width: 100%;
  background: white;
  border-radius: 10px;
  transition: all cubic-bezier(0.25, 0.1, 0.28, 1.54) 0.32s;


.line01 
  top: 19%;


.line02 
  top: 49%;


.line03 
  top: 79%;


.menu.close .line01 
  transform: rotate(45deg);
  top: 49%;


.menu.close .line02, .menu.close .line03 
  transform: rotate(-45deg);
  top: 49%;
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>
<div id="app">
  <div class="top-icon" class="toggleTopMenu" @click="showTopMenu = !showTopMenu">
    <div class="main-item menu" v-if="!showTopMenu">
      <span class="line line01"></span>
      <span class="line line02"></span>
      <span class="line line03"></span>
    </div>
    <div v-else>
      X
    </div>
  </div>
</div>

我对 UI 表示歉意。 :)

【讨论】:

似乎这是一个解决方案,但我应该在&lt;div v-else&gt; 里面放什么? 看起来像 X 或十字图标。 是的,我明白,但我不明白我将如何制作动画。我的意思是,如果我在这个 div 中放入相同的代码,那么什么都不会改变。我需要点击一下动画。请参阅此示例:codepen.io/jenningscreate/pen/xrbxKZ 在此示例中使用了 jQuery,但我不知道如何在我的 Vue 模板中实现相同的行为。 @OlgaB codepen.io/jenningscreate/pen/xrbxKZ 中的动画完全基于 CSS。 jQuery 仅用于添加/删除类,您也可以在 Vue 中轻松完成。我在 codepen.io/jacobgoh101/pen/QQoJYX 中将示例转换为 Vue。你可以试试。这里主要是关于 CSS 的。与 javascript 或 Vue 无关。 @JacobGoh 非常感谢!这就是我想要的。

以上是关于Vue.js:切换汉堡菜单图标的主要内容,如果未能解决你的问题,请参考以下文章

javascript [汉堡菜单]汉堡菜单切换与annimation #js

三行菜单?纳维康?抽屉?菜单图标?侧扫?三条纹?汉堡包? [关闭]

Xamarin.Forms Android 保留汉堡包/菜单图标而不是后退按钮

汉堡图标菜单不起作用

汉堡菜单图标☰未出现在日本野生动物园中

Bulma navbar-burger 未连接到 Vue.js 2 中的菜单项