分享
 
 
 

利用&#106avascript创建功能强大的GUI

王朝html/css/js·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

大多数的计算机用户都非常熟悉Windows的图形用户界面(GUI),都通过使用Word或微软的电子邮件客户端软件了解了按钮、工具条、标签,但与客户端软件都拥有几乎一致的界面截然不同的是,我们可以发现,每个网站的界面都各不相同。用户需要学会如何使用每一种互联网应用程序。尽管大多数的互联网应用程序都不是太复杂,但一个用户需要不断地去学习应用程序界面,时时感觉自己象个新手,这对于用户而言,毕竟不是一件令人愉快的事。

通过利用JavaScript和CSS建立互联网应用程序或网站的标准化的客户端界面组件,可以使用户一眼就看出来他们可以进行的操作以及如何完成自己的任务。用户就会对自己的操作更有信心,也不会轻易出现误操作。

或许你还不知道JavaScript还有这样的功能,或曾经在其他网站上看到过工具栏,但不知道它是如何完成的。在本篇文章中,我们将讨论如何建立一个简单的、格式化工具栏(就象Word中的那样),该工具栏可以为任意的网站添加让用户通过<textarea>区进行反馈的功能。本篇文章介绍的技巧需要读者具备有HTML、CSS和JavaScript方面的知识。

一点不足之处

下面的代码使用了selection对象的createRange()方法,不幸的是,只有Windows平台上的IE4+用户才能够使用selection对象,相似的功能通过文档对象模型(DOM)才能实现,但Mozilla中的document.createRange()会发生问题,主要是在input或textarea元素中不能处理文本数据。如果这一bug解决了,就可以使下面的代码运行在Mozilla、Netscape 6+或其他任何运行Gecko的浏览器平台上。

建立一个简单的工具栏

我们首先来创建一个拥有三个按钮的简单工具条:一个粗体按钮,一个斜体按钮,一个连接按钮。该工具栏是向一个现有的文本域添加功能的好方法,它可以让用户在无需了解HTML的情况下对输入的文本进行简单的控制。任何让用户参与或进行反馈的网站都可以利用这一工具栏进行加强。

我们的工具栏在功能上可以分为下面4个部分:

·封装选定文本附件HTML标记的JavaScript函数

·定制工具栏、按钮的外观和风格的样式表

·响应鼠标事件的JavaScript函数

·包含工具栏代码、图像、表格元素的HTML

我们首先来研究一下二个处理向<textarea>插入HTML代码的函数:

利用JavaScript处理文本集

function format_sel(v) {

var str = document.selection.createRange().text;

document.my_form.my_textarea.focus();

var sel = document.selection.createRange();

sel.text = "<" + v + ">" + str + "<" + v + ">";

return;

}

format_sel()只接受一个参数,即表示作用于选定文本的HTML标记的字符串。在这个工具栏中,我们用这个函数来控制<b>和<i>之间的文本。当然,如果愿意,我们可以使用<strong>和<em>替换<b>和<i>,或者使用这个函数控制一段选定的文本,或者在选择的标记中限定指定文本。

我们可以使用selection对象的createRange()方法方便地创建当前文本的TextRange对象。通过访问其text属性,我们可以得到<textarea>中选定的文本。text属性将被赋给一个局部变量。在下一行中,我们对<textarea>调用了focus(),这一行代码非常重要,否则,我们对文本的改变可能会被写到网页的其他部分去。最后,我们创建了指定文本的另一个引用,并赋给它一个新值:即位于适当的HTML标记中的原来的selection的地址。

function insert_link() {

var str = document.selection.createRange().text;

document.my_form.my_textarea.focus();

var my_link = prompt("Enter URL:","http://");

if (my_link != null) {

var sel = document.selection.createRange();

sel.text = "<a href=\"" + my_link + "\">" + str + "</a>";

}

return;

}

第二个函数insert_link()与format_sel()是相同的,加上prompt(),它们可以使用户输入一个超文本链接的值。使用prompt()的结果,我们可以将选定的文本和代码组合起来,创建一个连接。有了这些函数,我们就可以为用户创建所有类型的界面。下面我们来看一个例子。

在CSS中使用系统颜色

在网站上使用上面函数的最简单的方法就是在“bold”、“italic”、和“link”按钮的onclick事件处理程序中调用这些函数,但这不够刺激。由于我们使用了selection对象,把自己限定在了IE/Win平台上,我们就应该充分利用IE的特性,在CSS中使用用户定义的系统颜色,创建象我们在其他软件中看到的那样的动态按钮。下面我们首先来看看定义了工具栏、按钮、升起和按下二种按钮的状态的样式表。

toolbar {

margin: 0;

padding: 0;

width: 262px;

background: buttonface;

border-top: 1px solid buttonhighlight;

border-left: 1px solid buttonhighlight;

border-bottom: 1px solid buttonshadow;

border-right: 1px solid buttonshadow;

text-align:right;

}

.button {

background: buttonface;

border: 1px solid buttonface;

margin: 1;

}

.raised {

border-top: 1px solid buttonhighlight;

border-left: 1px solid buttonhighlight;

border-bottom: 1px solid buttonshadow;

border-right: 1px solid buttonshadow;

background: buttonface;

margin: 1;

}

.pressed {

border-top: 1px solid buttonshadow;

border-left: 1px solid buttonshadow;

border-bottom: 1px solid buttonhighlight;

border-right: 1px solid buttonhighlight;

background: buttonface;

margin: 1;

}

读者可能已经注意到,我们在样式表中使用了三种系统颜色引用:buttonface、buttonshadow和buttonhighlight。通过将buttonface作为工具栏和按钮的背景色,我们可以使用用户得到与其他应用软件相同的界面外观。用buttonshadow和buttonhighlight色创建边界,通过编写简单的JavaScript函数,就能使按钮具有3D效果。当然,如果想使该GUI更与网站而不是用户的浏览器匹配,可以更换适当的颜色。

能够改变按钮样式的JavaScript下面的四个函数供事件处理程序在改变鼠标事件图像的类名时使用。尽管可以把JavaScript代码编写成嵌入式的,但我们把它们组织进一个函数中,方便以后添加其他功能。

function mouseover(el) {

el.className = "raised";

}

function mouseout(el) {

el.className = "button";

}

function mousedown(el) {

el.className = "pressed";

}

function mouseup(el) {

el.className = "raised";

}

与HTML进行整合

现在剩下的工作就是将这些函数与包含工具栏、图像、文本域的HTML代码组合在一起:

<img class="button"

onmouseover="mouseover(this);"

onmouseout="mouseout(this);"

onmousedown="mousedown(this);"

onmouseup="mouseup(this);"

onclick="format_sel('b');"

src="bold.gif"

width="16" height="16"

align="middle"

alt="click to make your selection bold">

<img class="button"

onmouseover="mouseover(this);"

onmouseout="mouseout(this);"

onmousedown="mousedown(this);"

onmouseup="mouseup(this);"

onclick="format_sel('i');"

src="italic.gif"

width="16" height="16"

align="middle"

alt="click to make your selection italic">

<img class="button"

onmouseover="mouseover(this);"

onmouseout="mouseout(this);"

onmousedown="mousedown(this);"

onmouseup="mouseup(this);"

onclick="insert_link();"

src="link.gif"

width="32" height="16"

align="middle"

alt="click to add a link">

<textarea cols="30" rows="6" name="my_textarea"></textarea>

一个div中包含了三个按钮的图像,这样会使代码显得简洁。函数调用在<img>标记的事件处理程序中,我们向格式化函数传递一个将被改变样式的元素的引用,根据希望使用的格式(b表示粗体,i表示斜体),我们向format_sel()函数传递一个合适的参数。

结束语

当然,这只是创建工具栏的一种方法,还有许多其他方法也可以创建工具栏。读者创建的工具栏的功能也不必局限于本篇文章中涉及的功能,利用W3C DOM,可以很方便地改变一个文档的样式。

利用DOM操作,我们可以建立一个Word风格的工具栏,让用户定制显示卡的所有方面:改变字体的大小、文档的字体、改变栏目的宽度。结合使用CSS、JavaScript和DOM,我们能够创建与标准浏览器兼容的功能强大的应用软件GUI。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有