`
qinzhenzhou
  • 浏览: 10355 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

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控件开发之流动条控件
  • 10.rar (53.8 KB)
  • 下载次数: 5
  • 大小: 49.6 KB
分享到:
评论

相关推荐

    SharpMap 修改了web控件加入操作工具栏

    在此次修改中,"SharpMap 修改了web控件加入操作工具栏"这一标题揭示了开发人员对原生SharpMap Web控件进行了一次定制化的更新,以增强用户交互体验。他们添加了地图操作的工具,使得用户可以通过Web界面更加直观地...

    【源码】Javascript控件包

    9. **工具栏和面板**:提供一系列操作按钮和设置选项的区域。 10. **拖放功能**:如Sortable.js,实现元素的拖放排序和组织。 11. **响应式设计**:确保控件在不同设备和屏幕尺寸上的适配。 12. **辅助功能支持**...

    ASP.NET工具栏和菜单控件源码(仿Winform).zip

    1. 工具栏控件(ToolBar) 工具栏通常位于应用程序的顶部,包含一系列的按钮或下拉列表,用于执行常用操作。在ASP.NET中,ToolBar控件允许开发者自定义按钮、分割线和下拉菜单等,通过简单的拖放操作即可实现。此...

    Qt5开发及实例-CH2201-a1.rar,QT5制作工具栏控件代码

    在本实例中,我们主要探讨的是使用Qt5框架进行软件开发,特别是如何创建和使用工具栏控件(ToolBar)。工具栏通常在各种应用程序中作为快捷访问功能的区域,它允许用户快速触发常用的操作,比如保存、打开、撤销、...

    ASP.NET用户控件和自定义控件

    开发者可以将常见的界面元素,如导航栏、表单部分或者搜索框,封装成用户控件,然后在多个页面中使用。 **自定义控件(Custom Control)** 自定义控件比用户控件更高级,因为它们是从基类派生出来的,允许对渲染过程...

    非常美观的JAVASCRIPT日历控件

    JavaScript日历控件是网页开发中常用的一种交互元素,它为用户提供了一个直观的方式来选择日期,增强用户体验并简化数据输入。本资源包含三款专为input字段设计的日期小控件和两款独立的日历组件,全部基于...

    WEB页面控件

    浏览器工具栏控件是由Visual C++(简称VC)编写的,这是一种流行的C++集成开发环境,广泛用于Windows平台上的桌面和网络应用开发。通过VC,开发者可以利用MFC(Microsoft Foundation Classes)库来创建这样的控件,...

    jQuery mobile美化的菜单栏控件

    jQuery Mobile 的菜单栏控件,通常被称为“工具栏”(toolbar),分为顶部工具栏(header)和底部工具栏(footer)。这些工具栏可以包含各种元素,如标题、按钮、菜单等,提供了一种统一的方式来组织和美化页面内容...

    Silverlight模拟Office工具栏源码

    模拟这个工具栏,意味着开发者需要创建一套与之类似的UI元素,并实现相应的功能。这涉及到了UI设计、事件处理和数据绑定等技术。在Silverlight中,可以通过控件库(如Button、TextBox、ComboBox等)来构建界面,并用...

    .NET版日历控件(无回调)

    .NET版日历控件,完全JavaScript编写,封装在DLL中, 使用本控件只需先把该DLL拖放在工具栏中即可象一般的控件一样使用. 本控件为开发完整的第一个版本! 如对本控件有好的建议请联系QQ:285913930 ,我将尽力改善...

    asp.net 制作工具栏源码

    3. 自定义用户控件:对于更复杂的需求,开发者可以创建自定义用户控件,封装工具栏的逻辑和样式,使其可以复用在多个页面中。 在"Example019-制作工具栏"这个文件中,可能包含了一个或者多个ASP.NET页面(.aspx文件...

    利用vb的WebBrowser控件开发的网页浏览器

    用户可以通过浏览器的菜单或工具栏上的按钮添加收藏,程序会保存这些URL并提供一个界面供用户查看和访问收藏。这涉及到了文件操作、数据库连接以及用户界面设计的知识。 此外,设置浏览器的界面语言是一个更复杂的...

    常用的html控件,包含自定义控件

    6. dhtmlxToolbar:dhtmlxToolbar是用于创建网页工具栏的JavaScript库,可自定义按钮、下拉列表、分割线等元素,提供丰富的功能扩展,增强网页的交互性。 7. dhtmlxMenu:dhtmlxMenu提供了一种创建下拉菜单的解决...

    arcgis api 3.x for js入门开发系列三地图工具栏源码

    内容概览: 1. 地图框选缩放、地图漫游、清空、量算工具; 2. 地图比例尺控件; 3. 地图显示坐标; 4. 地图鹰眼。 具体详情见文章介绍:https://blog.csdn.net/liguoweioo/article/details/120376753

    ASP.NET AJAX控件工具包

    以上是ASP.NET AJAX控件工具包中的一些核心控件和扩展器,它们大大增强了ASP.NET开发人员构建富客户端应用的能力,提供了丰富的用户交互和视觉效果。使用这些工具可以简化开发过程,同时提供专业级别的Web应用程序...

    屏蔽IE的工具栏菜单栏地址栏(一共两个)

    根据给定的文件信息,我们可以深入探讨如何使用JavaScript来屏蔽Internet Explorer(IE)浏览器的工具栏、菜单栏和地址栏,实现一个自定义界面的弹窗功能。这在某些应用场景下,比如创建一个干净无干扰的用户界面或...

    导航栏控件---asp。net

    总之,ASP.NET的导航栏控件是构建交互式网站的重要工具,它们提供了灵活的配置选项和强大的功能,帮助开发者创建易于使用的导航系统。通过对控件的深入理解和自定义,可以创建出符合用户需求的个性化导航栏。

Global site tag (gtag.js) - Google Analytics