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

封装导航栏

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);

使用

相关推荐
wmm_会飞的@鱼4 分钟前
FlexSim-汽车零部件仓库布局优化与仿真
服务器·前端·网络·数据库·数学建模·汽车
yvvvy7 分钟前
从“按钮都不会点”到“能撸大厂 UI”:我用 react-vant 踢开组件库的大门!
前端·javascript
安然dn7 分钟前
Cropper.js:JS图像裁剪库
前端·javascript
Serendipity2619 分钟前
微服务架构
前端·微服务
Hilaku24 分钟前
深入background-image:你可能不知道的几个性能优化与高级技巧
前端·css
南岸月明27 分钟前
副业自媒体1年终于明白:为什么会表达的人,能量越来越强,更能赚到钱?
前端
Danny_FD40 分钟前
Vue + Element UI 实现模糊搜索自动补全
前端·javascript
gnip1 小时前
闭包实现一个简单Vue3的状态管理
前端·javascript
斐济岛上有一只斐济1 小时前
后端程序员的CSS复习
前端
Enddme1 小时前
《面试必问!JavaScript 中this 全方位避坑指南 (含高频题解析)》
前端·javascript·面试