javascript控件开发之工具栏控件

在前几篇的基础上,本篇将开发工具栏控件,工具栏控件一般包括三部份,

1、toolBar控件,简单说就是工具栏容器,

2、toolButton控件,即工具栏上的按钮控件,该按钮控件包括图标和文字两部份,

3、则是分隔符控件,一般分隔符控件也是在toolButton控件基础上引申出来的,

为了简单易学,我们这里直接用上一篇的控件作为toolBar控件使用,也就是我们这次编写出来的toolButton控件直按放一Panel控件上,

首先在component\ui\文件夹下添加控件文件,com.ui.toolButton.js 如下,

定义com.ui.toolButton控件类,继承com.ui.panel控件。

/**
 * 按钮控件类.
 * 创建: QZZ
 * 日期: 2014-04-06
 */
(function(undefined) {

 nameSpace("com.ui");

 com.ui.toolButton = Extend(com.ui.panel, {
    /**
     * 创建函数.
     */
    create:function(){
        this.base();
        this.className = "com.ui.toolButton";
        this.logInfo("create");
    },
    /**
    * 渲染函数.
    */
    render:function() {

    }
 });
})();

渲染函数如下,把渲染方式默认为“alLeft”,添加一个type属性,用于区别split控件或button控件,分别进行渲染。

1. split控件,则直接创建一个div,设置样式,然后宽度设置为8px;

2. button控件 则创建一个table,分三层次, 第一层用于设置高度,第二层用于放图标,第三层次用于放文字,图标与文字都通过配置方式获得。

  /**
   * 渲染函数.
   */
  render:function(){
      this.base();
      this.setAlign("alLeft");
      if(this.option.type === "split") {
         this.setWidth(8);
         this.setStyle(this.win, "toolButtonSplitStyle");
         var splitDiv = this.createElement("div");
         this.setStyle(splitDiv,"toolSplitStyle");
         this.win.appendChild(splitDiv);
      } else {
         //初始化caption
         this.caption = this.win.innerHTML;
         if(this.option.icon != null) {
             this.tabIcon = this.createElement("table");
             this.setStyle(this.tabIcon, "toolIconTabStyle");
             this.topCol = this.tabIcon.insertRow(0).insertCell(0);
             this.topCol.style.height = "1px";
             var col = this.tabIcon.insertRow(1).insertCell(0)
             col.innerHTML = '<img src="'+this.option.icon
                +'" style="width: 18px; height: 18px;"></img>';
             this.setStyle(col, "toolIconTdStyle");
             col = this.tabIcon.insertRow(2).insertCell(0);
             col.innerHTML = this.caption;
             this.setStyle(col, "toolIconTdStyle");
             this.win.innerHTML = "";
             this.win.appendChild(this.tabIcon);
         }
         this.setStyle(this.win, "toolButtonCommonStyle");
      }
  },

函数中用到几个画边框的样式,把他们都添加到com.comStyle.css文件中,如下:

.toolButtonSplitStyle {
    border-top:0px solid #EEEEEE;
 border-left:0px solid #EEEEEE;
 border-right:0px solid #555555;
 border-bottom:0px solid #555555;
 padding-left:4px;
 position:relative;
}

.toolSplitStyle {
    border-top:0px solid #EEEEEE;
 border-left:0px solid #EEEEEE;
 border-right:1px solid #EEEEEE;
 border-bottom:0px solid #555555;
 height:40px;
 top:10px;
 width:1px;
 background-color:#555555;
 margin:auto;
 position:relative;
}

.toolIconTabStyle{
    margin:auto;
 top:10px;
}

.toolIconTdStyle {
    text-align:center;
 height:16px;
}

.toolButtonCommonStyle {
    border-top:0px solid #EEEEEE;
 border-left:0px solid #EEEEEE;
 border-right:0px solid #555555;
 border-bottom:0px solid #555555;
 position:relative;
 text-align:center;
 cursor:pointer;
}

.toolButtonOverStyle {
    border-top:1px solid #EEEEEE;
 border-left:1px solid #EEEEEE;
 border-right:1px solid #555555;
 border-bottom:1px solid #555555;
 position:relative;
 text-align:center;
 cursor:pointer;
}

.toolButtonDownStyle {
    border-top:1px solid #555555;
 border-left:1px solid #555555;
 border-right:1px solid #EEEEEE;
 border-bottom:1px solid #EEEEEE;
 position:relative;
 text-align:center;
 cursor:pointer;
}

下面继续添加按钮的相关鼠标事件、大小变化事件(doResize)和修改文字内容方法,

思路类似前前一篇的按钮控件,

  //设置显示属性
  setCaption:function(caption) {
      this.caption = caption;
      if(this.tabIcon != null) {
          this.tabIcon.rows[1].cells[0].innerHTML = '<img src="'+this.option.icon+'" style="width: 18px; height: 18px;"></img>';
          this.tabIcon.rows[2].cells[0].innerHTML = this.caption;
      } else {
          this.win.innerHTML = this.imgStr + this.caption;
      }
  },
  /**
   * 大小重置函数.
   */
  _doResize:function(el) {
      this.base(el);
      if(this.option.icon == null) {
          this.win.style.lineHeight = this.option.height + "px";
      }
  },
  /**
   * 鼠标划过事件.
   * ev 事件对象
   */
  doMouseOver:function(ev) {
       if(this.option.type === "split") {
           return;
       }
       this.setStyle(this.win, "toolButtonOverStyle");
       this.hasSelect = true;
       this.focus = true;
       this.mouseOver = true;
  },
  /**
   * 鼠标划出事件.
   * ev 事件对象
   */
  doMouseOut:function(ev) {
      if(this.option.type === "split") {
          return;
      }
      this.setStyle(this.win, "toolButtonCommonStyle");
      this.hasSelect = false;
      this.focus = false;
      this.mouseOver = false;
  },
  /**
   * 鼠标按下事件.
   * ev 事件对象
   */
  doMouseDown:function(ev) {
      if(this.option.type === "split") {
          return;
      }
      this.setStyle(this.win, "toolButtonDownStyle");
      this.topCol.style.height = "2px";
  },
  /**
   * 鼠标弹起事件.
   * ev 事件对象
   */
  doMouseUp:function(ev) {
      if(this.option.type === "split") {
          return;
      }
      if(this.mouseOver) {
          this.setStyle(this.win, "toolButtonOverStyle");
          this.topCol.style.height = "1px";
          if(typeof this.onClick == "function") {
             //执行onclick事件
              this.onClick(ev);
          }
      }
  }

到此,控件已编写完成,下面我们用它来编写例子,如test.html文件,

<!DOCTYPE html>
  <head><title>test</title>
    <script src="../script/common/init.js" type="text/javascript"></script>
  </head>
  <body code="controllor/test.js" scroll="no" style="overflow:hidden">
    <div id='test6' code='com.ui.panel' option='{"align":"alTop","height":"60","width":"200","borderWidth":1,"padding":1}'>
     <div id='test8' code='com.ui.toolButton' option='{"height":"60","width":"60","icon":"image/test3.ico"}'>确定</div>
  <div id='test9' code='com.ui.toolButton' option='{"height":"60","width":"60","icon":"image/test2.ico"}'>取消</div>
  <div id='test10' code='com.ui.toolButton' option='{"height":"60","width":"60","type":"split"}'></div>
  <div id='test11' code='com.ui.toolButton' option='{"height":"60","width":"60","icon":"image/test1.ico"}'>退出</div>
 </div>
 <div id='test1' code='com.ui.panel' option='{"align":"alTop","height":"40","width":"200","borderWidth":1,"padding":1}'></div>
 <div id='test4' code='com.ui.panel' option='{"align":"alBottom","height":"50","width":"200","borderWidth":1,"padding":1}'>
  <div id='test2' code='com.ui.button' option='{"height":"25","width":"100","top":"12","right":"116"}'></div>
     <div id='test3' code='com.ui.button' option='{"height":"25","width":"100","top":"12","right":"8"}'></div>
 </div>
 <div id='test7' code='com.ui.panel' option='{"align":"alLeft","height":"100","width":"200","borderWidth":1,"padding":1}'></div>
 <div id='test5' code='com.ui.panel' option='{"align":"alClient","height":"100","width":"200","borderWidth":1,"padding":1}'></div>

  </body>
</html>

其中test.html文件目录下添加image文件夹,并把图标放在文件夹下面,

效果如上图,

可直接下载附件查看源码。

请关注下一篇, javascript控件开发之流动条控件

javascript控件开发之工具栏控件,布布扣,bubuko.com

时间: 2024-10-10 15:50:39

javascript控件开发之工具栏控件的相关文章

javascript控件开发之滚动条控件

首先,基于行前几篇开发的的框架,我们在目录 component\ui\下添加文件 com.ui.scrollBar.js, 在文件中定义com.ui.scrollBar类,继承com.ui.window类,如下/** * 滚动条控件. * 创建:QZZ * 日期:2014-03-01 */ (function(undefined) { nameSpace("com.ui"); /** * 滚动条控件. */ com.ui.scrollBar = Extend(com.ui.window

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

原文:利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer 注:ArcGIS样

IOS开发基础常用控件简介

在IOS开发中,各类控件完美的解决了开发过程中界面与交互展现的问题,使得IOS产品界面更加灵活实用,IOS常用控件的介绍如下. 1.窗口 UIWindow iPhone的规则是一个窗口,多个视图,窗口是你在app显示出来你看到的最底层,他是固定不变的,基本上可以不怎么理会,但要知道每层是怎样的架构. 2.视图 UIView, 是用户构建界面的基础,所有的控件都是在这个页面上画出来的,你可以把它当成是一个画布,你可以通过UIView增加控件,并利用控件和用户进行交互和传递数据. 窗口和视图是最基本

Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

原文:Win10 UWP开发系列--开源控件库:UWPCommunityToolkit 在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在Github上:https://github.com/Microsoft/UWPCommunityToolkit 包括以下几个类库: 都可以很方便的从Nuget上安装. NuGet Package Name des

基于MFC的ActiveX控件开发 (转)

ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的:一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能.MFC为广大VC程序员所熟悉,易于上手学习,但缺点是MFC封装的东西比较多,因此用MFC开发出来的控件相对会比较大,因此比较

Winform控件之菜单控件,工具栏控件和状态栏控件

菜单是用户获取应用程序中主要功能和实用程序的主要途径,如新建文件,打开文件等,这就需要用到菜单控件(MenuStrip).工具栏另一种获取应用程序主要功能的常用方法,比起菜单要直观,这就需要用到工具栏控件(ToolStrip).状态栏用于显示用户状态的简短信息,这就需要用到状态栏控件(StatusStrip). 一,MenuStrip控件和ContenxMenuStrip控件 MenuStrip控件是由System.Windows.Forms.MenuStrip类提供的,取代了以前的MainMe

.net 控件开发常见的特性总结

http://blog.csdn.net/aofengdaxia/article/details/5924364 在.net开发中常常需要使用一些[]里面的特性描述,我发现对常用的几个知道大概的意思,但是却不甚清楚到底有多少个特性,都如何使用.所以今天查了下msdn,把他们一一总结下来. 这些特性(属性)在System.ComponentModel下面,凡是带有Attribute结尾的的类都是可以作为方括号里面使用的.我将它们一一摘录下来,并且写上了自己的理解. AttributeUsageAt

WIndowsForm 公共控件 菜单和工具栏

                                                  公共控件   菜单栏 状态栏   布局    公共控件 textbox:  text属性:用于获取或设置文本框的文本 一般情况下,几乎所有的控件里的属性,都具备获取或设置两个功能 passwordchar:替换字符实现密码隐藏的效果 comboBox:  属性SelectedIndex = 0; 用于获取或设置选中项的索引 selectedText:获取或设置选中项的文本 selectedItem

C#自定义工业控件开发

转自阿凡卢原文C#自定义工业控件开发 由于工作需要,调研过一段时间的工业控制方面的"组态软件"(SCADA)的开发,组态软件常用于自动化工业控制领域,其中包括实时数据采集.数据储存.设备控制和数据展现等功能.其中工控组件的界面展现的实现类似于Windows系统下的各种开发控件,通过各种控件的组装,和硬件协议的集成,就可以实现对相应设备的控制和实时状态的显示. 每个对应的硬件UI展示都可以用一个自定义控件来实现,如下图的一个温度计,就可以使用UserControl来实现. using S