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与Ajax常用代码实现对比
Oct 03 Javascript
jquery的Theme和Theme Switcher使用小结
Sep 08 Javascript
js判断鼠标同时离开两个div的思路及代码
May 31 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
Nov 07 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
详解微信JS-SDK选择图片遇到的坑
Aug 15 Javascript
JavaScript学习笔记之DOM基础操作实例小结
Jan 09 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
javascript 构建模块化开发过程解析
Sep 11 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
Javascript无阻塞加载具体方式
2013/06/28 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
详解Python中类的定义与使用
2017/04/11 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python实现word2Vec model过程解析
2019/12/16 Python
使用Python构造hive insert语句说明
2020/06/06 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
岗位职责范本
2013/11/23 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书