JavaScript组件开发完整示例


Posted in Javascript onDecember 15, 2015

本文实例讲述了JavaScript组件开发的技巧。分享给大家供大家参考,具体如下:

使用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("DIV");
   cbody.className = "TabControl";
   cbody.style.width = width || "400px";
   cbody.style.height = height || "300px";
   //创建TAB控件头
   tabHead= document.createElement("DIV");
   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("DIV");
     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 + ',' + 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('B:'+ i + ',' + 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组件开发完整示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js 编程笔记 无名函数
Jun 28 Javascript
jquery入门—编写一个导航条(可伸缩)
Jan 07 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
jQuery中size()方法用法实例
Dec 27 Javascript
再谈JavaScript线程
Jul 10 Javascript
详解JavaScript时间格式化
Dec 23 Javascript
JavaScript驾驭网页-获取网页元素
Mar 24 Javascript
Markdown+Bootstrap图片自适应属性详解
May 21 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
react-native-video实现视频全屏播放的方法
Mar 19 Javascript
原生javascript实现连连看游戏
Jan 03 Javascript
简单说说如何使用vue-router插件的方法
Apr 08 Javascript
jQuery获取DOM节点实例分析(2种方式)
Dec 15 #Javascript
JavaScript为事件句柄绑定监听函数实例详解
Dec 15 #Javascript
JavaScript获取当前cpu使用率的方法
Dec 15 #Javascript
js简单网速测试方法完整实例
Dec 15 #Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 #Javascript
理解javascript闭包
Dec 15 #Javascript
jQuery检测滚动条是否到达底部
Dec 15 #Javascript
You might like
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
解析URI与URL之间的区别与联系
2013/11/22 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
基于python编写的微博应用
2014/10/17 Python
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
python实现狄克斯特拉算法
2019/01/17 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
django如何自己创建一个中间件
2019/07/24 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
python 回溯法模板详解
2020/02/26 Python
详解python如何引用包package
2020/06/07 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
如何执行一个shell程序
2012/11/23 面试题
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
环境建设实施方案
2014/03/14 职场文书
护士节策划方案
2014/05/19 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
普通话演讲稿
2014/09/03 职场文书
解放思想演讲稿
2014/09/11 职场文书
九年级化学教学反思
2016/02/22 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技