前言
本文介绍如何用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.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没啥好讲的
总结
封装组件是一劳永逸的事情,在日常工作中我们经常要反反复复写同样的代码,把时间花费了却没啥效率,因此以后大家可以尝试封装属于自己的组件库或框架。
本文手把手教你如何使用JavaScript来封装一个导航栏组件。通过创建一个div容器,设置ID和属性Avalue、Alink,然后用js获取这些属性值,进行字符串分割,动态生成并插入a和li标签,实现组件的创建。最后提供了html、js和css的代码示例,鼓励读者尝试封装自己的组件库。

3989

被折叠的 条评论
为什么被折叠?



