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 相关文章推荐
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
javascript实时显示北京时间的方法
Mar 12 Javascript
jQuery滚动条插件nanoscroller使用指南
Apr 21 Javascript
纯js实现重发验证码按钮倒数功能
Apr 21 Javascript
JavaScript生成福利彩票双色球号码
May 15 Javascript
JQuery日历插件My97DatePicker日期范围限制
Jan 20 Javascript
javascript实现瀑布流加载图片原理
Feb 02 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
Apr 29 Javascript
Vue.js自定义指令学习使用详解
Oct 19 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
杏林同学录(一)
2006/10/09 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
js 函数调用模式小结
2011/12/26 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
jQuery实现穿梭框效果
2021/01/19 jQuery
原生js实现无缝轮播图效果
2021/01/28 Javascript
python每隔N秒运行指定函数的方法
2015/03/16 Python
使用requests库制作Python爬虫
2018/03/25 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
中学生操行评语
2014/04/24 职场文书
物业管理专业求职信
2014/06/11 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
关爱空巢老人感想
2015/08/11 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android