Bulma Navbar 汉堡仅适用于 index.html 页面

Bulma Navbar burger only working on index.html page

我正在使用 Bulma 制作一个网站(我对 Bulma 和 CSS 框架还很陌生)并为我的 Navbar 汉堡导入了 Bulma.js,但它只适用于家庭( index.html) 页。

我认为这是因为在其他页面上我用

加载了导航栏
$("#nav").load("../extras/nav.html");

并在 header 中正常导入 bulma.js。我试过从 nav.html 文件中导入它并将其放入 body 中。我还以各种方式使用 window.onload。我可以验证 bulma.js 在我下载并添加 console.log 时是否已加载并且它有效。

这会将 nav.html 加载到 div。

<div id="nav"></div>
$(document).ready(function() {
        console.log('loading navbar');
    $("#nav").load("../extras/nav.html");
});

This is the full nav.html file

很明显,头部有一条连接 bulma.js 的线。

目标是让导航汉堡在不改变太多内容(例如链接 nav.html)的情况下工作,但目前导航汉堡在点击时不执行任何操作(index.html 页面除外这是相同的,但 nav.html 代码硬编码在)

此外,这是我的第一个 Stack overflow post(来自 Reddit)所以我希望一切正常,这个问题可以得到解决。

这是因为你是在JS文件加载后添加元素,并且在DOM之后是"ready"。因此,当页面加载时,可点击元素不存在,因此该元素没有附加任何内容。

我会建议几种解决方案之一。

  1. 只需将导航 HTML 添加到每个页面即可。

  2. 将汉堡菜单的点击行为添加到您的导航 HTML 模板。这是来自 Bulma 文档。

<script>

  $(".navbar-burger").click(function() {

      // Toggle the "is-active" class on both the "navbar-burger" and the "navbar-menu"
      $(".navbar-burger").toggleClass("is-active");
      $(".navbar-menu").toggleClass("is-active");

  });

</script>
  1. 在后端使用类似 PHP 的模板化语言,您可以在服务器端而不是前端添加负载 templates/resources。

如果你想跳过jquery,使用像Vue这样的框架,这里是另一个解决方案:

<template>

    <nav class="navbar" role="navigation" aria-label="main navigation">
        <div class="navbar-brand">
            <a class="navbar-item" href="https://bulma.io">
                <img src="https://bulma.io/images/bulma-logo.png" width="112" height="28">
            </a>

            <a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample" v-bind:class="{ 'is-active': showBurger}"  @click="showBurger = !showBurger">
                <span aria-hidden="true"></span>
                <span aria-hidden="true"></span>
                <span aria-hidden="true"></span>
            </a>
        </div>

        <div id="navbarBasicExample" class="navbar-menu" v-bind:class="{ 'is-active': showBurger}">
            <div class="navbar-start">
                <a class="navbar-item">
                    Home
                </a>

                <a class="navbar-item">
                    Documentation
                </a>

                <a class="navbar-item">
                    Service
                </a>
            </div>

        </div>
    </nav>


</template>

<script>

export default {

    data(){
        return {
            showBurger: false
        }
    }
}

</script>