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

article/2025/8/10 8:45:23

封装导航栏

navbar-template.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

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 DOMthis.shadowRoot.appendChild(link);this.shadowRoot.appendChild(template.content.cloneNode(true));} catch (err) {console.error('加载模板失败:', err);}}
}customElements.define('nav-bar', NavBar);

使用

image-20250530224735665

http://www.hkcw.cn/article/NiiSSseSXO.shtml

相关文章

mac mini m4命令行管理员密码设置

附上系统版本图 初次使用命令行管理员&#xff0c;让输入密码&#xff0c;无论是输入登录密码还是账号密码&#xff0c;都是错的&#xff0c;百思不得其解&#xff0c;去网上搜说就是登录密码啊 直到后来看到了苹果官方的文档 https://support.apple.com/zh-cn/102367 https…

使用Vditor将Markdown文档渲染成网页(Vite+JS+Vditor)

1. 引言 编写Markdown文档现在可以说是程序员的必备技能了&#xff0c;因为Markdown很好地实现了内容与排版分离&#xff0c;可以让程序员更专注于内容的创作。现在很多技术文档&#xff0c;博客发布甚至AI文字输出的内容都是以Markdown格式的形式输出的。那么&#xff0c;Mar…

黑马k8s(十七)

一&#xff1a;高级存储 1.高级存储-pv和pvc介绍 2.高级存储-pv 3.高级存储-pvc 最后一个改成5gi pvc3是没有来绑定成功的 pv3没有绑定 删除pod、和pvc&#xff0c;观察状态&#xff1a; 4.高级存储-pc和pvc的生命周期 二&#xff1a;配置存储 1.配置存储-ConfigMap 2.配…

【ABAP 基本数据类型】

ABAP 基本数据类型 一、数值类型 1.1 整数类型 类型关键字长度值范围示例代码标准整型I4字节-2,147,483,648 到 2,147,483,647DATA lv_int TYPE i VALUE 100.短整型INT22字节-32,768 到 32,767DATA lv_short TYPE int2 VALUE -500.无符号整型INT11字节0 到 255DATA lv_flag T…

LearnOpenGL-笔记-其十一

Normal Mapping 又到了介绍法线贴图的地方&#xff0c;我感觉我已经写了很多遍了... 法线贴图用最简单的话来介绍的话&#xff0c;就是通过修改贴图对应物体表面的法线来修改光照效果&#xff0c;从而在不修改物体实际几何形状的前提下实现不同于物体几何形状的视觉效果。 因…

Scratch节日 | 粽子收集

端午节怎么过&#xff1f;当然是收粽子啦&#xff01;这款 粽子收集 小游戏&#xff0c;让你一秒沉浸节日氛围&#xff0c;轻松收集粽子&#xff0c;收获满满快乐&#xff01; &#x1f3ae; 玩法介绍f 开始游戏&#xff1a;点击开始按钮&#xff0c;游戏正式开始&#xff01;…

Linux(9)——进程(控制篇——下)

三、进程等待 1&#xff09;进程等待的必要性 之前提过子进程退出&#xff0c;父进程如果不读取子进程的退出信息&#xff0c;就可能造成“僵尸进程”的问题&#xff0c;从而造成内存泄漏的问题。再者&#xff0c;一旦子进程进入了僵尸状态&#xff0c;那就连kill -9都杀不亖…

Scratch节日 | 六一儿童节

六一儿童节到啦&#xff01;快来体验这款超简单又超好玩的 六一儿童节 小游戏吧&#xff01;只需要一只鼠标&#xff0c;就能尽情释放你的创意&#xff0c;绘出属于你自己的缤纷世界&#xff01; &#x1f3ae; 玩法介绍 鼠标滑动&#xff1a;在屏幕上随意滑动鼠标&#xff0c…

高原户外制氧机的优势特点有哪些

一、便携设计&#xff0c;突破环境限制 高原户外制氧机以轻量化、紧凑化设计为核心&#xff0c;重量普遍控制在3kg以内&#xff0c;可轻松装入背包或车载空间。采用折叠式吸氧管与一体化电源设计&#xff0c;支持太阳能充电板或车载供电&#xff0c;满足徒步、骑行、自驾等多元…

harmonyos实战关于静态图片存放以及image图片引入

编写demo轮播图的时候&#xff0c;用到图片&#xff0c;想到静态资源具体存放在哪里&#xff1f;&#xff1f; 官网工程目录结构解释&#xff1a;文档中心 Resource资源 使用资源格式可以跨包/跨模块引入图片&#xff0c;resources文件夹下的图片都可以通过$r资源接口读取到并…

LINUX530 rsync定时同步 环境配置

rsync定时代码同步 环境配置 关闭防火墙 selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUXdisable设置主机名 hostnamectl set-hostname code hostnamectl set-hostname backup设置静态地址 cd /etc/sysconfi…

超低延迟与高稳定性的行业领先直播解决方案

随着实时音视频技术的不断发展&#xff0c;直播行业的需求逐渐从单一的流媒体传输向更高效、更稳定、更加智能化的方向转变。作为一家创新型技术公司&#xff0c;上海视沃信息科技有限公司凭借其自研的大牛直播SDK&#xff0c;为各行业提供了一款极致体验的、低延迟、高稳定的音…

华为云Flexus+DeepSeek征文 | 基于Dify和DeepSeek-R1开发企业级AI Agent全流程指南

作者简介 我是摘星&#xff0c;一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型&#xff0c;将实际使用经验分享给大家&#xff0c;希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 环境准备 2.1 华为云资源准备 2.1 实…

quasar electron mode如何打包无边框桌面应用程序

预览 开源项目Tokei Kun 一款简洁的周年纪念app&#xff0c;现已发布APK&#xff08;安卓&#xff09;和 EXE&#xff08;Windows&#xff09; 项目仓库地址&#xff1a;Github Repo 应用下载链接&#xff1a;Github Releases Preparation for Electron quasar dev -m elect…

Linux 中应用层自定义协议与序列化 -- 自定义协议概述,序列化和反序列化,Jsoncpp

目录 1. 应用层自定义协议概述 2. 序列化和反序列化 3. 重新理解 read, write, recv, send 以及 TCP 为什么支持全双工 4.Jsoncpp 4.1 Jsoncpp 的特性 4.2 使用 Jsoncpp 的序列化和反序列化 4.3 Json::Value 的介绍 4.3.1 构造函数 4.3.2 访问元素 4.3.3 类型检查 …

历年南京理工大学计算机保研上机真题

2025南京理工大学计算机保研上机真题 2024南京理工大学计算机保研上机真题 2023南京理工大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 求阶乘 题目描述 给出一个数 n n n ( 1 ≤ n ≤ 13 ) (1 \leq n \leq 13) (1≤n≤13)&#xff0c;求出它…

[JVM] JVM内存调优

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

当 Python 遇上 Go:Sponge 如何成为替代 Django/Flask 的理想选择

开篇&#xff1a;Python 老司机的自白 各位 Python 老铁们&#xff01;咱们写 Python 那叫一个"纵享丝滑"——动态类型玩到飞起&#xff0c;列表推导式秀得飞起&#xff0c;Django/Flask 一把梭&#xff0c;PyPI 库多到能砸死人&#xff01;是不是觉得自己就是代码界…

Flask与PostgreSQL交互教程

目录 1. 项目结构2. 环境准备2.1 安装依赖2.2 使用Docker启动PostgreSQL 3. 数据库配置3.1 环境变量配置3.2 数据库连接配置 4. 定义数据库模型5. 实现API接口5.1 创建用户5.2 获取所有用户5.3 获取单个用户5.4 更新用户5.5 删除用户 6. 运行应用7. API测试7.1 创建用户7.2 获取…

QT中sqlite多线程操作注意事项总结:安全性与效率的双重提升

QT中sqlite多线程操作注意事项总结&#xff1a;安全性与效率的双重提升 【下载地址】QT中sqlite多线程操作注意事项总结 本项目深入探讨了在Qt框架下进行SQLite多线程操作时可能遇到的四大关键问题&#xff0c;包括线程安全、数据库连接管理、信号与槽机制以及性能优化。通过详…