javascript - 如何使用 Tailwind 和 Vue.js 动态显示移动菜单?

标签 javascript css vue.js nuxt.js tailwind-css

我正在尝试使用 Tailwind CSS 和 Vue.js 构建响应式菜单。目前我有这个模板:

<template>
<nav class="flex items-center justify-between flex-wrap bg-pink-100 p-6">
    <div class="flex items-center flex-shrink-0  mr-6">
        <span class="font-semibold text-xl tracking-tight">Pixie</span>
    </div>
    <div class="block md:hidden" >
        <button @click='clickMenu' class="flex items-center px-3 py-2 border rounded" >
        <svg class="fill-current h-3 w-3" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><title>Menu</title><path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z"/></svg>
        </button>
    </div>
    <div class="w-full flex-grow md:flex md:items-center md:w-auto" v-if="menuVisible">
        <div class="text-sm md:flex-grow">
        <a href="#responsive-header" class="block mt-4 md:inline-block md:mt-0 hover:text-white mr-4">
            Features
        </a>
        <a href="#responsive-header" class="block mt-4 md:inline-block md:mt-0  hover:text-white mr-4">
            Pricing
        </a>
        <a href="#responsive-header" class="block mt-4 md:inline-block md:mt-0  hover:text-white">
            Blog
        </a>
        </div>
        <div>
        <a href="#" class="inline-block text-sm px-4 py-2 leading-none border rounded  text-white bg-blue-500 hover:border-transparent mt-4 md:mt-0">Sign Up</a>
        <a href="#" class="inline-block text-sm px-4 py-2 leading-none border rounded  hover:border-transparent mt-4m d:mt-0">Log In</a>
        </div>
    </div>
</nav>
</template>

使用这个 Javascript:

<script>
export default {
    data: function() {
        return {
            menuVisible: true
        }
    },
    methods: {
        clickMenu: function() {
            this.menuVisible = !this.menuVisible
        }
    }

}
</script>

我只想在断点到达 Tailwind 上的“sm”时隐藏移动菜单。这意味着用户必须单击菜单按钮才能看到菜单,我认为这是移动设备上的预期行为。

我不想构建 2 个在不同断点上显示的单独菜单,因为我想避免重复代码。有没有办法在 Vue.js 中访问 Tailwind 的当前断点?这意味着我可以将 menuVisible 设置为计算属性,该属性仅在断点为桌面或平板电脑或用户单击菜单时才允许它可见。

或者还有其他更好的方法吗?

感谢您的帮助!

最佳答案

你可以在你的应用程序中为它写一个插件并导入它,我使用的是 nuxt,这对我有用

export default (context, inject) => {
  const burger = () => {
    const menu = document.querySelector("#menu");

    if (menu.classList.contains("hidden")) {
      menu.classList.remove("hidden");
    } else {
      menu.classList.add("hidden");
    }
  };
  inject("burger", burger);
  context.$burger = burger;
};

关于javascript - 如何使用 Tailwind 和 Vue.js 动态显示移动菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157764/

相关文章:

javascript - 使用异步方法返回的对象

html - 带有 &lt;style&gt; 标签的 SVG 动画问题

html - 为什么图像在定义背景时不显示 : url() rule in CSS but is displaying when adding 'src' attribute to <img> tag?

javascript - 在 Vuex 中使用 get/set 计算属性和 mapState、mapMutation

vue.js - 无法运行 "vue-cli-service serve"[vue 3]

php - 在 URL 中包含表单选择值

javascript - Office 365、Sharepoint、Html <h1> 内容列表

javascript - 使用 JQuery 附加带有样式的 div

vue.js - 使用 "vue-cli-service serve"时在哪里可以找到 outputdir 或 dist 文件

javascript - 更改 SVG 的 CSS 不执行任何操作