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.fn和jQuery.prototype区别介绍
Oct 05 Javascript
JavaScript作用域与作用域链深入解析
Dec 06 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
封装好的js判断操作系统与浏览器代码分享
Jan 09 Javascript
Javascript连接Access数据库完整实例
Aug 03 Javascript
基于JS实现简单的样式切换效果代码
Sep 04 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
input输入密码变黑点密文的实现方法
Jan 09 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
JavaScript实现按键精灵的原理分析
Feb 21 Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
好好学习保证书
2015/02/26 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
钢琴师观后感
2015/06/12 职场文书