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日历控件 实例代码
Jul 12 Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
smartcrop.js智能图片裁剪库
Oct 14 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
Jan 08 Javascript
React Native自定义控件底部抽屉菜单的示例
Feb 08 Javascript
详解Vue.js使用Swiper.js在iOS
Sep 10 Javascript
vue+express+jwt持久化登录的方法
Jun 14 Javascript
策略模式实现 Vue 动态表单验证的方法
Sep 16 Javascript
jQuery实现手风琴效果(蒙版)
Jan 11 jQuery
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+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
node网页分段渲染详解
2016/09/05 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
django 多数据库配置教程
2018/05/30 Python
python实现飞机大战
2018/09/11 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
入党思想汇报
2014/01/05 职场文书
法人授权委托书格式
2014/04/08 职场文书
感恩教育活动总结
2014/05/05 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
python中的None与NULL用法说明
2021/05/25 Python