>  기사  >  웹 프론트엔드  >  JavaScript 구성요소 개발을 위한 완전한 샘플 코드 공유

JavaScript 구성요소 개발을 위한 완전한 샘플 코드 공유

黄舟
黄舟원래의
2017-03-18 15:00:031363검색

JavaScript를 사용하여 객체 지향 아이디어에 따라 구성 요소를 구축합니다.

이제 TAB 구성 요소를 예로 들어 보겠습니다.

기능적으로 말하면 구성 요소에는 코드 구조 측면에서 시각적 부분과 논리적 제어 부분이 포함되며, 구성 요소에는 코드 부분과 리소스 부분(스타일, 그림 등)이 포함됩니다.

구성 요소의 특징: 높은 응집력, 낮은 결합(다른 코드와 논리적으로 교차하지 않으며 상속 및 포함 가능), 캡슐화(개인 메서드 및 변수 숨기기)(반복적으로 사용 가능, 조립에 사용 가능) 더 복잡한 응용 프로그램).

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JS 组件</title>
<style>
.TabControl{
	position:absolute;

}

.TabControl .tab-head{
	height:22px;width:100%;
/*	border-left: solid 0px #e0e0e0;border-right: solid 0px #e0e0e0;border-top: solid 0px #e0e0e0;border-bottom: solid 1px #e0e0e0; */
	position:absolute;
	z-index:9;
}

.TabControl ul{
	position:absolute;
	top:2px;
	padding:0px;
	margin:0px;
	z-index:10;
}

.TabControl li{
	list-style:none; /* 将默认的列表符号去掉 */
	padding-left:10px;  padding-right:10px;
	margin:0; 
	float:left;
	border: solid 1px #e0e0e0;
	background-color:#ffffff;	
	height:20px;
	cursor:default;
}

.TabControl  li.selected{
	border-bottom: solid 1px #ffffff;border-top: solid 1px #ff0000;
	z-index:10;	
}

.TabControl li.unselected{
	border-bottom: solid 1px #e0e0e0;border-top: solid 1px #e0e0e0;
	z-index:10;	
}


.TabControl  .pageSelected{
	position:absolute;
	display:block;
	border: solid 1px #e0e0e0; 
	width:100%;height:100%;
	z-index:1;
	top:23px;
}

.TabControl .pageUnSelected{
	display:none;
	border: solid 1px #e0e0e0; 
	width:100%;height:100%;
	z-index:1;
	top:23px;	
}
</style>
</head>

<body>
<script lang="javascript">
	var TabControl = function(width, height){
		var me = this;
		
		//TAB控件容器,头,列表
		var cbody,tabHead, ul;	
		
		//最后选中的TAB页
		var lastSelectedPage = 0;
		
		//TAB页管理容器
		var pages = [];		
		

		/**
		 * 初始化函数
		 * param{tabCount}, 创建tab页的个数
		 */
		me.init = function(tabCount){
			//创建TAB容器
			cbody = document.createElement("p");
			cbody.className = "TabControl";
			cbody.style.width = width || "400px";
			cbody.style.height = height || "300px";

		    //创建TAB控件头
			tabHead= document.createElement("p");
			tabHead.className = "tab-head";
			cbody.appendChild(tabHead);
			
			//创建TAB头
			ul = document.createElement("UL");
			tabHead.appendChild(ul);
		
			//根据参数初始化TAB页,缺省创建2个TAB页
			var tc = tabCount ||  2;
			
			for(var i=0;i<tc;i++){
				me.insertPage(i,"tabPage" + i) 
			}
			
			//缺省选中第一页
			me.selectPage(0); 
		}
		
		/**
		 * 插入TAB页
		 * param{idx},插入位置
		 * param{title},TAB页标题
		 *
		 */
		me.insertPage = function(idx,title){
			if(parseInt(idx)>=0){
			 	var li = document.createElement("LI");
			 	li.className = "unselected";
			 	li.innerText = title;
			 	var chd = ul.childNodes[idx];
			 	ul.insertBefore(li);
			 	li.onclick = function(){
			 		me.selectPage(getSelectedIndex(li));
			 	}
			 	
			 	
			 	//创建page
			 	var page = document.createElement("p");
			 	page.className = "pageUnSelected";
			 	pages.push(page);
			 	cbody.appendChild(page);
			 }			
		}
		
		/*
		 * 内部函数
		 * 根据选中的对象,获取对应的TAB页索引
		 */
		function getSelectedIndex(li){
			var chd = ul.childNodes;
			for(var i=0;i<chd.length;i++){
				if(chd[i] == li){
					return i;
				}
			}
		}
		
		
		/**
		 * 选中某页
		 * param{idx},选中页的索引
		 */
		me.selectPage  = function(idx){
			if(parseInt(idx)>=0){				
				var lis = ul.childNodes;

				alert(lastSelectedPage + &#39;,&#39; + idx);
				lis[lastSelectedPage].className = "unselected";	
				lis[idx].className  = "selected";

/*
				
				for(var i=0;i<lis.length;i++){
					if( i== idx){
						lis[i].className  = "selected";
					} else{
						alert(&#39;B:&#39;+ i + &#39;,&#39;  + lis[idx].innerText);
						lis[i].className  = "unselected";
					}

				}
*/						
				
				//隐藏无需显示的TAB页,显示选中的TAB页
				pages[lastSelectedPage].className = "pageUnSelected";	
				pages[idx].className = "pageSelected";	
	
				lastSelectedPage = idx;
			}

		}
		
		//在函数尾部调用初始化函数执行初始化
		me.init();
	
	    //最后返回DOM对象
		return  cbody;
	}


	var tabControl = new TabControl();
	document.body.appendChild(tabControl);	
</script>
</body>

</html>


최종 효과는 아래와 같습니다.


위 내용은 JavaScript 구성요소 개발을 위한 완전한 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.