封装导航栏
navbar-template.html
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>
navbar.js
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);
使用