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 相关文章推荐
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
Jquery插件之打造自定义的select标签
Nov 30 Javascript
JS打开图片另存为对话框实现代码
Dec 26 Javascript
js实现页面转发功能示例代码
Aug 05 Javascript
JS获取时间的方法
Jan 21 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
Nginx设置为Node.js的前端服务器方法总结
Mar 27 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 jQuery
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 jQuery
vue 实现用户登录方式的切换功能
Apr 14 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
咖啡知识大全
2021/03/03 新手入门
PHP实现抓取HTTPS内容
2014/12/01 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
基于json的jquery地区联动效果代码
2011/07/06 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
bpython 功能强大的Python shell
2016/02/16 Python
Python程序中设置HTTP代理
2016/11/06 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
python面向对象法实现图书管理系统
2019/04/19 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
办公室副主任职责范本
2014/03/08 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
小学教师师德整改措施
2014/09/29 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
党校学习个人总结
2015/02/15 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
如何写好开幕词?
2019/06/24 职场文书