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 相关文章推荐
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
js对文章内容进行分页示例代码
Mar 05 Javascript
js判断浏览器是否支持严格模式的方法
Oct 04 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
浅谈angularjs中响应回车事件
Apr 24 Javascript
详解如何实现一个简单的 vuex
Feb 10 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
Mar 09 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
Sep 27 jQuery
Vue路由 重定向和别名的区别说明
Sep 09 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中使用Oracle数据库(3)
2006/10/09 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
Python实现字典的key和values的交换
2015/08/04 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
应届电子商务毕业自荐书范文
2014/02/11 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python