手把手教你用js封装一个导航栏组件

本文手把手教你如何使用JavaScript来封装一个导航栏组件。通过创建一个div容器,设置ID和属性Avalue、Alink,然后用js获取这些属性值,进行字符串分割,动态生成并插入a和li标签,实现组件的创建。最后提供了html、js和css的代码示例,鼓励读者尝试封装自己的组件库。


前言

本文介绍如何用js封装一个组件,这里以导航栏为例。
看这篇文章你需要有一定的js基础哦


一、实现思路介绍

我打算写个如图1-1 所示的导航栏;在前端用div作为组件的容器,并设置ID为‘nav’,在div上添加两个属性Avalue、Alink,分别用来传递a标签的文本值和href值,多个值之间用分号隔开,如图1-2;最后用js获取Avalue、Alink的值,将Avalue、Alink按分号进行切割存到数组中,然后用for循环拼接a标签和li标签,最后再用innerHTML方法将HTML标签写入,如图1-3。
在这里插入图片描述

图 1-1

在这里插入图片描述

图 1-2

在这里插入图片描述

图 1-3

二、代码

1.html代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>前端组件封装测试</title>
		<script type="text/javascript" src="js/test.js"></script>
		<link rel="stylesheet" href="css/index.css" />
	</head>
	<body>
		<!-- 导航栏 -->
		<div id="nav" Avalue="百度网;新华网;百度网;新华网" Alink="https://www.baidu.com/;http://www.gx.xinhuanet.com/;https://www.baidu.com/;http://www.gx.xinhuanet.com/"></div>
	</body>
</html>

Tip:核心代码就一句,其实作用就是为组件提供一个容器,ID必须与js对应起来,我这里ID设置为‘nav’,Avalue和Alink也必须与js对应起来,多个值之间用分号隔开。

2.js代码

// 页面加载时加载样式
window.onload = function(){
	//alert('测试测试');
	//获取A标签的文本
	var Avalue = document.getElementById("nav").getAttribute("Avalue");
	//获取A标签的href值
	var Alink = document.getElementById("nav").getAttribute("Alink");
	//声明一个数组存储A标签的文本值
	var AvalueArr = new Array();
	AvalueArr = Avalue.split(';');
	for(var i=0; i<AvalueArr.length; i++){
		console.log(AvalueArr[i]);	
	}
	//声明一个数组存储A标签的href值
	var AlinkArr = new Array();
	AlinkArr = Alink.split(';');
	//声明一个html字符串变量
	var htmlA = "";
	//循环拼接html a、li标签
	for(var i=0;i<AvalueArr.length;i++){
	 htmlA  += '<a href="'+AlinkArr[i]+'"><li>'+AvalueArr[i]+'</li></a> \n' ;
	}
	console.log(htmlA)
	
	//获取组件容器ID
	var _self = document.getElementById('nav');
	//写入html标签 即写入导航栏组件样式
	_self.innerHTML = '<!-- 导航栏 开始 -->'+
	'<div class="nav">'+
	'<!--导航栏左部分 开始-->'+
	'<div class="nav-left">'+
	'<ul>'+ htmlA +'</ul>'+
	'</div>'+
	'<!--导航栏左部分 结束-->'+
	'<!--导航栏右部分 开始-->'+
	'<div class="nav-right"></div>'+
	'<!--导航栏右部分 结束-->'+
	'</div>'+
	'<!-- 导航栏结束 -->';
}

Tip:代码中注释写的很清楚,其作用就是获取前端DIV的两个属性(Avalue、Alink ),对其进行分割存储到数组中,将其拼接到html的a标签里,最后用innerHTML 方法将所有的HTML写入到前端容器中。

3.css代码

*,body,html{
	padding: 0;
	margin: 0;
}
/*导航栏样式*/
.nav{
	width: 100%;
	height: 8vh;
	background: #005ead;
}
.nav-left{
	display: inline-block;
	width: 80%;
	/*background: red;*/
	padding-left: 15px;
}
/*.nav-active{
	background: #fff;
	color: #FF8929;
}*/
.nav-left ul li{
	display: inline-block;
	list-style: none;
	line-height: 8vh;
	padding: 0 5px;
}
.nav-left ul li:hover{
	background: #fff;
	color: #FF8929;
}
.nav-left ul a{
	text-decoration: none;
	color: #fff;
}
.nav-right{
	display: inline-block;
	width: 17%;
	height: 8vh;
	overflow: hidden;
	/*border: 1px solid black;*/
	background-image: url(../img/logo20200324.png);
	background-size: cover;
	margin-top: -5vh;
}

/*轮播图样式*/
.slideshow{
	width: 80%;
	height: 25vh;
	background: #c1c1c1;
	margin: 10px auto;
	overflow: hidden;
}
.slideshow-module{
	width: 24.72%;
	height: 25vh;
	background: #005EAD;
	display: inline-block;
}

/*主体内容样式*/
.container{
	width: 80%;
	height: 50vh;
	background: #C1C1C1;
	margin: auto;
}
/*头条样式*/
.headlines{
	width: 100%;
	height: 10vh;
	margin: auto;
	background: #005EAD;
}

Tip:css没啥好讲的

总结

封装组件是一劳永逸的事情,在日常工作中我们经常要反反复复写同样的代码,把时间花费了却没啥效率,因此以后大家可以尝试封装属于自己的组件库或框架。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值