使用原生前端技术封装一个组件

封装导航栏

html 复制代码
<header>
    <nav>
        <ul>
            <li><a href="index.html"><i class="fas fa-home"></i> 主页</a></li>
            <li>
                <a href="#"><i class="fas fa-theater-masks"></i> 非遗项目</a>
                <ul class="sub-menu">
                    <li><a href="projects.html#beijing"><i class="fas fa-theater-masks"></i> 京剧</a></li>
                    <li><a href="projects.html#jianzhi"><i class="fas fa-scissors"></i> 剪纸</a></li>
                </ul>
            </li>
            <li>
                <a href="#"><i class="fas fa-user-friends"></i> 传承人</a>
                <ul class="sub-menu">
                    <li><a href="heritage.html#zhangsan"><i class="fas fa-user-friends"></i> 张三</a></li>
                    <li><a href="heritage.html#lisi"><i class="fas fa-user-friends"></i> 李四</a></li>
                </ul>
            </li>
            <li>
                <a href="#"><i class="fas fa-calendar-alt"></i> 活动</a>
                <ul class="sub-menu">
                    <li><a href="events.html#festival"><i class="fas fa-calendar-alt"></i> 非遗文化节</a></li>
                    <li><a href="events.html#workshop"><i class="fas fa-tools"></i> 工作坊</a></li>
                </ul>
            </li>
            <li>
                <a href="#"><i class="fas fa-info-circle"></i> 关于我们</a>
                <ul class="sub-menu">
                    <li><a href="about.html"><i class="fas fa-info-circle"></i> 关于我们</a></li>
                    <li><a href="news.html"><i class="fas fa-newspaper"></i> 非遗新闻</a></li>
                </ul>
            </li>
            <li>
                <a href="#"><i class="fas fa-user-circle"></i> 用户中心</a>
                <ul class="sub-menu">
                    <li><a href="login.html"><i class="fas fa-sign-in-alt"></i> 登录</a></li>
                    <li><a href="register.html"><i class="fas fa-user-plus"></i> 注册</a></li>
                </ul>
            </li>
        </ul>
    </nav>
</header>
js 复制代码
class NavBar extends HTMLElement {
    constructor() {
        super();
        this.attachShadow({ mode: 'open' });
        this.loadTemplate();
    }

    async loadTemplate() {
        try {
            const response = await fetch('/template/navbar-template.html'); // 路径根据实际调整
            const text = await response.text();
            const template = document.createElement('template');
            template.innerHTML = text;
            // 创建 link 元素并添加样式表
            const link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = '/css/navbar.css'; // 替换为你的组件样式文件路径
            // 插入样式和模板内容到 Shadow DOM
            this.shadowRoot.appendChild(link);
            this.shadowRoot.appendChild(template.content.cloneNode(true));
        } catch (err) {
            console.error('加载模板失败:', err);
        }
    }
}

customElements.define('nav-bar', NavBar);

使用

相关推荐
哆啦A梦15881 分钟前
商城后台管理系统 01 Vue-i18n国际化
前端·javascript·vue.js
期待のcode5 分钟前
Vue的安装创建与运行
前端·javascript·vue.js
百锦再8 分钟前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构
旺仔Sec8 分钟前
2025年海南省职业院校技能大赛“应用软件系统开发“赛项竞赛样题
前端·应用软件系统开发
FakeOccupational32 分钟前
【树莓派 002】 RP2040 实现示波器 PIO来驱动 ADC10080 并抓取数据方案+ 内置12-bitADC&DMA&网页前端可视化方案
前端
DJ斯特拉38 分钟前
Vue工程化
前端·javascript·vue.js
秋深枫叶红38 分钟前
嵌入式第三十五篇——linux系统编程——exec族函数
linux·前端·学习
LinDon_1 小时前
【vue2form表单中的动态表单校验】
前端·javascript·vue.js
一水鉴天1 小时前
整体设计 之28 整体设计 架构表表述总表的 完整程序(之27 的Q268 )(codebuddy)
java·前端·javascript