一直以来,我都主要是做winform方面的编程,最近做了点web方面的,所以也研究了几天的javascript。偶有心得故记之:
应用面向对象的思想在javascript中同样适用,关键的是你敢不敢用,想不想用。
我曾使用vs2005编写了一个vs2003工具箱完全类似的导航工具条,我比较喜欢在winform中通过这种方式向用户提供应用程序功能的导航。所以我也想在web中也使用这种方式。网络上这样的例子很多,但是看过以后都感觉编码比较复杂,不容易扩展。所以我决定应用vs2005中开发的经验,用javascript来自己写一个。很多常用的东西自己花费点时间写是我比较喜欢的方法,我不大喜欢使用别人写的,有时候花费在研究别人东西上的时间基本都可以自己写出来了。并且自己写的修改容易,应用容易。。。估计这是一个不怎么好的思想。不过我比较喜欢接受别人的思路,而不喜欢一行行去阅读别人的代码。我研究别人的东西喜欢先看demo。
下面介绍下使用javascript写这么个工具条的思路:
1、工具条组成:分类(我命名为ToolBand)
-- 用div标签实现,其中Caption以及Image用span以及img标签实现。工具按钮(我命名为ToolItem)
-- 用div标签实现,其中Caption以及Image用span以及img标签实现。工具按钮的容器(我命名为ToolItemContainer)
-- 用div标签实现。工具条(我命名为ToolBar)
-- 用div实现。注:为什么上面的这些都使用div标签呢?各位做web的同志都明白,div+css的确在页面布局方面可以让代码更简洁。
2、在javascript中定义对象的方法,写发完全就是写函数,这对于某些刚开始接触的同志估计不是很适应。
比如:
var ToolBar=function(Width,Height,....)
{
this.Bands = new Array(); //ToolBar中所有的Band
//其他属性
.....
.....
}
//ToolBar的AddBand方法,其实也就是把一个band增加到ToolBar的Bands数组中
ToolBar.prototype.AddBand = function(band)
{
....
}
/*
* 初始化完成所有的Band以及ToolItem以后,必须调用此函数来显示OutLookBar
* 参数:
* parentElem:表示显示OutLookBar的容器
*/
ToolBar.prototype.Show = function(parentElem)
{
/*
* 根据this.Bands可以遍历所有的Band
* 然后根据this.Bands[i].ToolItems可以遍历Bands[i]下的所有ToolItem
* 根据所遍历到的Band以及ToolItem中保存的属性,比如Caption,Width,Height等等,
* 动态创建(比如document.createElement("div"))出实际显示的div,span等等元素,并显示。
*/
var toolbar = document.createElement("div");
toolbar.style.height = "100%";
toolbar.style.width = "100%";
toolbar.style.position="relative"; //只有使用relative以后,所有的band才可以正确排列
//Band数
this.ParentElement=parentElem;
this.ParentElement.appendChild(toolbar);
for(var i=0; i<this.Bands.length;i++)
{
var bandElem=this.Bands[i].BandElement();
.....
bandElem.onclick=_OutLookBarSwithBars;
toolbar.appendChild(bandElem);
//创建一个新的div来包含this.Bands[i]中的ToolItems元素
var ToolItemContainer = document.createElement("div");
//设置ToolItemContainer 属性
for(var j=0; i<this.Bands[i].ToolItems.length;j++)
{
//将this.Bands[i].ToolItems.ToolItemElement添加到ToolItemContainer上
//如:ToolItemContainer.appendChild(this.Bands[i].ToolItems.ToolItemElement);
//....
}
}
}
这样就定义了一个ToolBar对象,其中包含了一个Bands数组,因为一个ToolBar中有多个Band
function Band(name,caption,....)
{
//Band中所有的ToolItem。
this.ToolItems = new Array();
this.name = name;
this.caption = " " + caption;
//其他属性,你自己根据需要来定义,比如Band上的背景图片,背景颜色等。
....
}
//Band的方法,增加ToolItem,其实就是把item增加到this.ToolItems数组中
Band.prototype.AddItem = function(item)
{
.....
}
/*
* 返回当前Band
* 格式:
* ----------------------------
* | Image | caption |
* ----------------------------
*/
Band.prototype.BandElement=function()
{
var divElem = document.createElement("div");
divElem.id="ToolBar_Band" + this.name;
divElem.name=this.name;
....
divElem.style.color=this.color;
....
divElem.style.position="absolute";
divElem.style.width="100%";
divElem.style.left=0;
//显示图片:如果没有提供图片路径,那么不显示图片
if(this.imageURL!=null && this.imageURL.length>0)
{
var imgElem=document.createElement("img");
imgElem.src = this.imageURL;
divElem.appendChild(imgElem);
}
//显示标题
var spanElem=document.createElement("span");
//spanElem.style.fontSize="14px";
/*
* 为了支持IE和firefox,这里只能使用innerHTML
* 其实innerText和innerHTML都不是W3C标准
* 其实在firefox下textContent和IE的innerText等效
*/
//spanElem.innerText=this.caption;
spanElem.innerHTML=this.caption;
divElem.appendChild(spanElem);
return(divElem);
}
这里定义了一个Band,其中定义了一个ToolItems数组,因为一个Band中包含多个ToolItem
function ToolItem(name,caption,....)
{
this.name = name;
this.caption = caption;
//下面定义其他属性
....
}
/*
* 此函数返回每个ToolItem所对应的Dom元素,由几个部分组成:
* 1、图片部分;
* 2、标题部分;
* 样式如:
* *********
* * 图片 *
* *********
* **************
* *= 标题 =*
* **************
*通过下面的Table来实现精确控制
* <table>
* <tr>
* <td>
* //这里放置图片Div
* </td>
* </tr>
* <tr>
* <td>
* //这里放置标题Div
* </td>
* </tr>
* </table>
*/
ToolItem.prototype.ToolItemElement=function()
{
var divElem=document.createElement("div");
divElem.style.width="100%";
divElem.style.background="white";
divElem.style.color="black";
divElem.style.align="center";
//显示图片:并且设置相关控制属性
var imgElem=document.createElement("img");
imgElem.name=this.name;
imgElem.caption=this.caption;
imgElem.src = this.imageURL;
....
imgElem.onclick=this.ToolItemClick; //设置事件
//显示标题:
var spanCaption=document.createElement("span");
/*
* 为了支持IE和firefox,这里只能使用innerHTML
* 其实innerText和innerHTML都不是W3C标准
* 其实在firefox下textContent和IE的innerText等效
*/
//spanCaption.innerText=this.caption;
spanCaption.innerHTML=this.caption;
var table=document.createElement("table");
table.style.width="100%";
table.insertRow(-1); //这里必须带参数-1,否则在firefox中不能正常显示
table.insertRow(-1);
var CellImag=table.rows[0].insertCell(-1);
CellImag.appendChild(imgElem); //图片部分
//注意,这样写是不能工作的:CellImag.style.align="center";
CellImag.align="center";
var CellCaption=table.rows[1].insertCell(-1);
CellCaption.appendChild(spanCaption); //标题部分
CellCaption.align="center";
divElem.appendChild(table); //标题部分
return divElem;
}
//其他不如响应事件:imgElem.onclick=this.ToolItemClick; //设置事件等等,自己可以根据实际情况来写就可以了
这样就定义了一个ToolItem对象,总是要包含属性和方法的,上面讲了属性,下面来介绍方法的定义。比如Band的AddItem方法:
通过这样的思想,不但代码结构非常清晰,并且修改,扩展变的非常容易。好了,我给出的是思路,具体实现各位做吧。
实现这么个东西,从构思到编码我用了一天半,所以思想上是不难的,关键是思路。
下面给各位看看实现的效果图。 以上就是思路,以及效果图。
分享到:
相关推荐
在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
JavaScript是一种广泛应用于Web开发的脚本语言,..."JavaScript面向对象编程指南"这本书应该是对这一主题的详细解析,包括概念讲解、实例演示以及最佳实践,对于想要提升JavaScript编程能力的人来说是一份宝贵的资源。
这些只是JavaScript面向对象编程的一些基本概念和技巧,实际应用中还有更深入的模式和策略,如模块化、设计模式等。理解并熟练运用这些概念,将有助于你编写出更加高效、可维护的JavaScript代码。
### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...
#### 三、面向对象编程在JavaScript中的应用 虽然JavaScript本身并不是一种传统的面向对象语言,但它通过原型继承机制支持OOP。每个对象都有一个原型,原型可以是一个对象,也可以是一个构造函数。通过这种方式,...
### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着时间的发展,JavaScript已经成为了一种功能全面的编程语言,尤其是在Web开发...
根据提供的文件信息,我们将重点放在面向对象编程(OOP)在JavaScript中的应用上。JavaScript作为一种广泛使用的脚本语言,不仅在浏览器环境中发挥着重要作用,在服务器端开发(如Node.js)及桌面应用程序开发等领域也...
面向对象编程在JavaScript中的实现主要基于以下三个概念:构造函数、原型和实例化。构造函数是一个特殊类型的函数,用于创建和初始化一个新对象。当你定义一个构造函数时,实际上是在定义一个对象类型。例如: ```...
### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...
`JavaScript面向对象编程讲解.pptx`可能提供了更详细的理论解释和更多示例,帮助读者深入理解面向对象编程在JavaScript中的应用。 学习JavaScript面向对象编程,不仅有助于理解代码的结构和复用性,还有助于提高...
### JavaScript面向对象编程详解 #### 一、JavaScript面向对象编程简介 JavaScript作为一种广泛使用的脚本语言,虽然起源于一种简单的浏览器脚本环境,但随着时间的发展,它已经演变为一种功能强大的编程语言,...
作者深入浅出地介绍了面向对象编程的基本原理以及如何将这些原理应用于JavaScript中。 #### 二、面向对象编程基础 面向对象编程(OOP)是一种软件开发方法,它通过将数据和处理这些数据的方法捆绑在一起形成“对象”...
JavaScript是一种广泛应用于Web开发的动态脚本语言,其在创建交互式网页和应用程序时起着核心作用。...阅读《JavaScript面向对象编程.pdf》这份资料,你将能够进一步了解和掌握JavaScript的面向对象编程技巧。
在本“JavaScript面向对象编程”主题中,我们将深入探讨这一概念及其在JavaScript中的应用。 1. **对象和类的概念**:在面向对象编程中,对象是数据和操作这些数据的方法的集合。在JavaScript中,对象是由键值对...
JavaScript是一种动态类型的脚本语言,虽然它不像Java或C#那样拥有传统的类和实例机制,但它的面向对象编程能力仍然非常强大。JavaScript的核心在于对象、原型和隐式继承,这些都是理解其面向对象特性的重要概念。 ...
总结来说,JavaScript面向对象编程涵盖了从基本原理到实现细节的多个方面,包括但不限于对象、构造函数、原型链、继承以及封装等。本书系统地介绍了这些知识点,并通过实例演示了如何在现代JavaScript中实现OOP,...