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获取下拉列表的值为null的解决方法
Mar 18 Javascript
禁用JavaScript控制台调试的方法
Mar 07 Javascript
JavaScript中的prototype和constructor简明总结
Apr 05 Javascript
javascript无刷新评论实现方法
May 13 Javascript
常用DOM整理
Jun 16 Javascript
javascript jquery对form元素的常见操作详解
Jun 12 Javascript
基于jQuery实现选项卡效果
Jan 04 Javascript
Node.js实现连接mysql数据库功能示例
Sep 15 Javascript
pm2 部署 node的三种方法示例
Oct 20 Javascript
angularJs 表格添加删除修改查询方法
Feb 27 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
微信小程序前端promise封装代码实例
Aug 24 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之变量、常量学习笔记
2008/03/27 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
浅谈php扩展imagick
2014/06/02 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
JavaScript 继承详解(三)
2009/07/13 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
js断点调试经验分享
2017/12/08 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
自我评价如何写好?
2014/01/05 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
2015年校长新年寄语
2014/12/08 职场文书
办公室文员岗位职责
2015/02/04 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
Python+Appium自动化测试的实战
2021/06/30 Python
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android