Java Web程序开发范例宝典
上QQ阅读APP看书,第一时间看更新

2.4 水平导航条应用

网站导航条对于每个网站来说都是必不可少的,它相当于城市中的路标,可以指引浏览者找到自己热衷的内容。水平导航条有很多种,如本节中介绍的带图标的文字导航条、Flash导航条、图片按钮导航条、质感效果的导航条等。下面将介绍网站中常用的几种导航条。

实例042 带图标的文字导航条

本实例是一个美化界面、人性化的程序

实例位置:光盘\mingrisoft\02\042

实例说明

为了方便浏览者浏览网站中的内容,每个网站都设有导航条。本实例主要介绍的是带图标的文字导航条,在导航文字前设置图标,是为了能够让浏览者在进行页面浏览时,不通过文字也可以知道每个导航条的大致内容,增强网站的趣味性。运行本实例,如图2.16所示,当单击导航文字或图标时,可以进入所对应的链接页面。

图2.16 带图标的文字导航条

技术要点

本实例主要是应用HTML的IMG标记(插入导航条中的图标)和A标记(设置文字和图标的超链接)来实现的。下面将详细介绍IMG标记和A标记。

IMG标记的语法格式如下:

        <img attribute>

参数说明:

● attribute:IMG标记的属性列表,常用的属性如表2.6所示。

表2.6 IMG标记的常用属性

A标记的语法格式如下:

        <a href="URL地址" name="名称" title="提示性文字" target="指定超链接的目标窗口" accesskey="key" event="脚本">超链
  接文字</a>

属性说明:

● href:用于指定目标文件的URL地址,通常有绝对地址、文件相对地址和根目录相对地址3种形式。

● name:指定超链接的名字。

● title:该属性可选,用于指定指向超链接时显示的标题文字。

● target:该属性可选,用于指定超链接页面的打开方式,如果省略该属性,则目标文件将取代包含该超链接的文件。target属性既可以是窗口或框架的名称,又可以是“_blank”、“_parent”、“_self”和“_top”4个保留字中的一个。

● accesskey:指向该超链接的快捷键。当用户按下Alt+Key键时,选择该超链接。其中Key代表键盘上的任何数字或字母键。例如:accesskey="M",当用户按下Alt+M键时,选择该超链接。

● event:用于指定当用户选择该超链接时执行的操作。event的值可以是onBlur、onClick、onMousemove、onMouseout、ondblclick、onMouseover等鼠标事件。

技巧:在对Image对象进行超链接时,会出现蓝色边框,此时只需将borders属性值设置为0,即可去掉此边框。

实现过程

(1)在页面中的适当位置插入一个一行多列的表格,该表格的列数请根据导航链接的个数确定。

(2)首先在每个单元格中添加一个IMG标记作为图标的图片,然后再添加一个回车符和超链接文字,最后,为图标和文字设置超链接。关键代码如下:

        <td width="12%" align="center"><a href="index.jsp"><img src="images/N_index.gif" width="37" height="30" border= "0"><br>
            首页</a></td>

技巧:作为图标的图片采用GIF格式,可以实现图标的背景透明,前提条件是设计的图标是背景透明的。

举一反三

根据本实例,读者可以:

设计开发企业门户网站中的导航条;

设计电子商务网站中的导航条。

设计搜索网站中的导航条。

实例043 Flash导航条

本实例是一个美化界面的程序

实例位置:光盘\mingrisoft\02\043

实例说明

在开发网站的过程中,为了使网站有一个更好的视觉感受,增强页面的表现力,可以使用Flash制作导航条。运行本实例,将鼠标指针移动到“首页”导航文字上时,其下方将显示一条红色的线,如图2.17所示,鼠标指针移出后,该红线即刻消失,单击Flash中的导航文字就会进入相应的页面。

图2.17 Flash导航条

技术要点

本例中,主要应用到了Flash的动作脚本中Button类的release方法。release方法在按下并释放鼠标左键时被触发。

语法如下:

        on(release)
        {
        //此处是您的语句
        }

实现过程

(1)新建一个Flash,在菜单中选择“插入”→“新建元件”命令,在弹出的“创建新元件”对话框中选择“按钮”单选按钮,单击“确定”按钮。

(2)在“弹起”的关键帧输入文本“首页”,选择“指针经过”帧,单击鼠标右键,在弹出的快捷菜单中选择“插入关键帧”命令,在“按下”帧插入一个动画元件,在“点击”帧中画出作用区域。

(3)返回场景,从库中将按钮元件拖入到场景中适当的位置。

(4)选中按钮,打开“动作”面板,在代码区中输入相应的代码如下:

        on (release)
        {
                getURL("index.jsp");
        }

(5)依次做出多个按钮。

(6)生成SWF文件。

(7)在网页中插入刚刚生成的SWF文件,代码如下:

        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/
  cabs/flash/swflash.cab#version=7,0,19,0" width="767" height="80">
            <param name="movie" value="navigation.swf" />
            <param name="quality" value="high" />
              <embed src="navigation.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/
  x-shockwave-flash" width="767" height="80"></embed>
            </object>

举一反三

根据本实例,读者可以开发网站中的各种Flash导航条。

实例044 图片按钮导航条

本实例是一个人性化的程序

实例位置:光盘\mingrisoft\02\044

实例说明

网站网页形式的多样性,是吸引浏览者的一个重要途径,增强页面的立体感是网站多样性的一种表现,设计按钮形式的导航条使导航效果更加明显,给人以更加真实的感觉。当浏览者单击该链接按钮时,给浏览者一种直接触摸按钮的感觉。运行本实例,如图2.18所示。

图2.18 图片按钮导航条

技术要点

本实例主要应用图片热点超链接来实现,通过HTML的<map>标记可以为图片添加热点。为图片设置热点超链接的语法格式如下:

        <img src=“file_name” usemap=“#MapName”>
        <map name=“MapName”>
        <area shape=“value” coords=“坐标” href=“URL” alt=“描述文字”>
        …
        </map>

标记<map>属性如表2.7所示。

表2.7 <map>标记的属性说明

在<map>标记中,根据属性shape的取值不同,相应坐标的设定也不同。下面介绍属性shape的3种取值以及相应坐标的设定。

(1)设定属性shape的属性值为rect。

属性shape取值为rect时,表示矩形区域,属性coords的坐标形式为“X1,Y1,X2,Y2”。其中,X1、Y1代表矩形左上角的x坐标和y坐标,X2、Y2代表矩形右下角的x坐标和y坐标。

(2)设定属性shape的属性值为circle。

属性shape取值为circle时,表示圆形区域,属性coords的坐标形式为“X,Y,r”。其中,X、Y为圆心坐标,r为圆的半径。

(3)设定属性shape的属性值为poly。

属性shape取值为poly时,表示多边形区域,属性coords的坐标形式为“X1,Y1,X2,Y2,……,Xn,Yn”。其中,Xn、Yn代表构成多边形每一顶点的坐标值,n的取值为1,2,3,……n,多边形有几条边就有几对x、y坐标。

注意:可以在<body>区域中的任一位置定义<map name="mapname"></map>标签,name是图片热点的名称。

实现过程

(1)在图像制作软件中设计一张带有超链接按钮的图片。

(2)在Dreamweaver的菜单中,选择“插入”→“图像”命令,将插入一张图片,单击选中此图片,此时在“属性”面板中可以看到此图片的相关属性。初次使用“属性”面板时其默认为“简化”形式,单击右下方的向下箭头可打开其扩展属性模式。

(3)选择图片后,在其“属性”面板中选择“矩形热点工具”,为图片的每个按钮添加热点超链接。选中热点区域,在其“属性”面板中的“超链接”文本框中输入超级链接的地址,本实例中设置为空链接“#”,依次为每个热点设置超链接地址。

举一反三

根据本实例,读者可以:

实现图形化比较强的游戏网站中的导航条;

实现公司门户网站中的导航条;

实现个人主页中的导航条。

实例045 导航条的动画效果

本实例是一个美化界面的程序

实例位置:光盘\mingrisoft\02\045

实例说明

导航条是网站设计中不可缺少的元素之一,它能正确地引导浏览者查找需要的资料,成为浏览者的网站路标。同时,网页导航条的设计风格也能影响页面的整体效果,对于一个静态元素居多的页面,可以为导航条添加动态效果,这样可以使整个网站不至于太呆板,增强网页的欣赏价值。例如,在明日科技网站中,为导航条设计了动画效果,这样只要用户将鼠标指针移动到任意一个导航按钮上时,该按钮都会突出显示,鼠标指针移走后,又恢复为原来状态。如图2.19所示。

图2.19 导航条的动画效果

技术要点

本实例主要是通过Image对象的鼠标事件控制Image对象的src属性的值实现的。

在JavaScript里提供了对图像进行处理的专用对象Image来装入文档的图像。Image对象类型与其他对象的差别在于,其允许通过构造器显示和创建新的Image对象类型,创造和预装入的图形之前并非是Web页面的组成部分。Image对象存在于浏览器的缓冲区中,用于替换已经显示的图像。

用image()构造器创建图形的语法格式如下:

        ObjImg=new image()   //创建了一个新的Image对象,并将其赋予变量ObjImg
        ObjImg.src="图片文件相对路径"  //设置Image对象的src属性

在利用Image对象编程之前,首先利用IMG标志显示属性。在HTML中,要显示图片可以用如下语句来实现:

        <IMG src="pictureName.gif" name="ImgName">

在JavaScript中可以用下面的语句访问Image对象。

        document.Img.src=" menu_01.gif";

实现过程

(1)准备14 张图片,7 张鼠标指针移出时显示的图片,图片的名称为“menu_0”加上1至7的数字再加上“.gif”,7张鼠标移入时显示的图片,图片的名称为“menu_0”加上1至7的数字再加上“_over.gif”。

注意:如果图片menu_01.gif代表的是公司首页的图片,则menu_01_over.gif代表的图片一定也是公司首页的图片。

(2)将步骤(1)所准备的7张鼠标指针移出时显示的图片按顺序插入到页面中的适当位置,并设置其鼠标事件onMouseMove和onMouseout执行的操作,这里分别调用两个不同的自定义JavaScript函数move()和out(),关键代码如下:

        <img src="Images/top/menu_01.gif" id="image1" width="95" height="119" border="0" onMouseMove="move(this,'1')" onMou
  seout="out(this,'1')">
        <img src="Images/top/menu_02.gif" id="image2" width="95" height="119" border="0" onMouseMove="move(this,'2')" onMou
  seout="out(this,'2')">
        <img src="Images/top/menu_03.gif"name="image3"  width="95"height="119"border="0"onMouseMove="move(this,'3')"on
  Mouseout="out(this,'3')">
        <img src="Images/top/menu_04.gif" name="image4" width="94" height="119" border="0" onMouseMove="move(this,'4')" on
  Mouseout="out(this,'4')">
        <img src="Images/top/menu_05.gif" name="image5" width="95" height="119" border="0" onMouseMove="move(this,'5')" on
  Mouseout="out(this,'5')">
        <img src="Images/top/menu_06.gif" name="image6" width="94" height="119" border="0" onMouseMove="move(this,'6')" on
  Mouseout="out(this,'6')">
        <img src="Images/top/menu_07.gif" width="95" name="image7" height="119" border="0" onMouseMove="move(this,'7')" on
  Mouseout="out(this,'7')">

(3)编写自定义的JavaScript函数move()和out()。move()用于设置鼠标指针移入导航按钮上时显示的图片,out()用于设置鼠标指针移出导航按钮上时显示的图片,代码如下:

        <script language="javascript">
        //鼠标移动效果
        var A_Img=new Image();
        function move(image,num){
            image.src='Images/top/menu_0'+num+'_over.gif';
        }
        function out(image,num){
            image.src='Images/top/menu_0'+num+'.gif';
        }
        </script>

举一反三

根据本实例,读者可以:

开发企业门户网站的导航条;

开发在线影院的导航条;

开发电子商务网站的导航条。

实例046 不用图片实现质感导航条

本实例是一个提高效率、人性化的程序

实例位置:光盘\mingrisoft\02\046

实例说明

很多网站都采用了质感比较强的导航条,用以增强网页的视觉冲击力,大多数情况下,这些导航条的背景都是通过图像制作软件制作的质感图片实现的,应用这种方法制作的网站,如果想改变网页的主体色调会比较麻烦,需要再次修改图片。下面介绍一种只需修改网页代码就可改变导航条背景色的方法,那就是应用CSS样式实现。运行本实例,如图2.20所示,导航条的背景的质感效果就是通过CSS样式实现的。

图2.20 不用图片实现质感导航条

技术要点

本实例主要通过CSS的波浪变形效果滤镜Wave实现的。Wave滤镜的基本语法如下:

        {filter:wave(add=add,freq=freq,lightstrength=strength,phase=phase,strength=strength)}

参数说明:

● add:表示是否要把对象按照波形样式打乱。值为true或false。

● freq:表示波形的频率,也就是指定在对象上一共需要产生多少个完整的波纹。

● lightstrength:表示可以对波纹增强光影效果,范围是0~100。

● phase:用来设置正弦波的偏移量。

● strength:用来设置振幅的大小。

实现过程

(1)在网页的导航条的位置添加一个单线边框的表格,并将表格的背景颜色设置为页面的主色调,同时添加导航文字,代码如下:

            <table width="100%"height="27"  border="1"cellpadding="0"cellspacing="0"
              bordercolor="#FFFFFF" bordercolordark="#FFFFFF" bordercolorlight="#006666"
              bgcolor="#336666" >
              <tr align="center">
                <td valign="bottom"><a href="#" class="shadow">公司首页</a></td>
                <td valign="bottom"><a href="#" class="shadow">公司简介</a></td>
                <td valign="bottom"><a href="#" class="shadow">产品介绍</a></td>
                <td valign="bottom"><a href="#" class="shadow">技术支持</a></td>
                <td valign="bottom"><a href="#" class="shadow">公司荣誉</a></td>
                <td valign="bottom"><a href="#" class="shadow">网站地图</a></td>
                <td valign="bottom"><a href="#" class="shadow">招贤纳士</a></td>
            <td valign="bottom"><a href="#" class="shadow">与我联系</a></td>
          </tr>
        </table>

(2)为步骤(1)中制作的导航条添加质感效果,即在<table>标记中添加style属性,该属性值为wave滤镜的代码,具体代码如下:

        style="filter:wave(add=false,freq=1,lightstrength=50,phase=50,strngth=10)"

举一反三

根据本实例,读者可以:

为图片添加特殊的效果;

实现网站的自动换肤功能。

实例047 标签页导航条

本实例是一个提高效率、人性化的程序

实例位置:光盘\mingrisoft\02\047

实例说明

当一个页面内容比较多,比较复杂时,可以使用标签页,将功能类似的信息放在同一个标签页内,用户可以方便地在不同的标签页间切换。Dojo提供了方便实现标签页的工具包。本实例将介绍如何通过Dojo实现标签页导航条。运行本实例,在页面中将以标签页形式显示社会、法制、体育和娱乐等类别的即时新闻,如图2.21所示。单击“法制”、“体育”和“娱乐”标签,将分别显示各类别的最新新闻。

图2.21 标签页导航条

技术要点

Dojo是一个JavaScript库,包含很多用JavaScript编写的包,负责处理在开发一个JavaScript应用时通常必须自己实现的基础工作。

Dojo提供了美观而实用的工具集,这个工具集包括树、富文本编辑器、日期选择器、菜单和容器等。本实例中应用的就是Widget家族的TabContainer和ContentPane容器。

在使用Dojo时,首先需要加载所需包的对象。dojo对象的require函数,可以调用某个包空间的对象。在使用Dojo时,如果需要的对象未引入到JavaScript文件中,则应该调用require函数来请求这个包空间,Dojo会根据require请求自动得到相应的js文件,并加载到内存中。Dojo会自动维护已经加载的包列表,所以不会重复加载。require函数的语法如下:

        dojo.require(object)

参数说明:

● object:用于指定要调用的对象,包括包路径。

例如,加载TabContainer包的具体代码如下:

        dojo.require("dijit.layout.TabContainer");

一个标签页效果需要由TabContainer和ContentPane两个容器组成,其中TabContainer表示整个标签页容器,而ContentPane则用于声明每一个标签页。

在页面中,可以很方便地声明TabContainer对象,只需在<div>标记中设置dojoType属性为dijit.layout.TabContainer就可以了。例如,本实例中声明TabContainer对象的具体代码如下:

        <div id="mainTabContainer" dojoType="dijit.layout.TabContainer" style="width:541px;height:177px; display:block; border:0
  solid #FFFFFF;">

接下来还需要声明ContentPane对象。在声明ContentPane对象时,与声明TabContainer对象一样,也需要指定dojoType属性,所不同的时,此时需要指定属性值为dijit.layout.ContentPane。另外,通常还需要应用以下属性。

● refreshOnShow:用于指定在该标签页从隐藏到展现时,是否刷新数据,值为true或false。

● href:用于指定该标签页内显示页面的URL地址。

● selected:用于指定该标签页是否为选中状态,值为true或false。

● title:用于指定单个标签页的标题。

● preload:用于指定是否强制加载数据,值为true或false。

实现过程

(1)从http://dojotoolkit.org/downloads网站下载最新的Dojo,目前较新的版本为1.2.3,下载后的文件为dojo-release-1.2.3.tar.gz。

(2)解压缩文件dojo-release-1.2.3.tar.gz到本地服务器上,并将其保存到应用所在文件夹下的js文件夹下,如图2.22所示。

图2.22 Dojo安装后的目录结构

(3)编写index.jsp页面。在该页面的合适位置添加实现即时新闻导航的标签页。

导入Dojo提供的外部CSS样式表文件并引用Dojo库和dijit库,以及加载所需的包对象。具体代码如下:

        <style type="text/css">
              @import "js/dijit/themes/tundra/tundra.css";
              @import "js/dojo/resources/dojo.css";
        </style>
        <link href="CSS/style.css" rel="stylesheet">
        <script type="text/javascript"src="js/dojo/dojo.js"djConfig="parseOnLoad:true"></script>   <!--引用Dojo库-->
        <script type="text/javascript"src="js/dijit/dijit.js"></script>                            <!--引用dijit库-->
        <script type="text/javascript">
              dojo.require("dijit.layout.TabContainer");                                          //加载TabContainer对象
              dojo.require("dijit.layout.ContentPane");                                           //加载ContentPane对象
        </script>

声明TabContainer和ContentPane对象,实现标签页导航,关键代码如下:

        <div style="position:absolute;" class="tundra">
              <div id="mainTabContainer" dojoType="dijit.layout.TabContainer"
              style="width:541px;height:177px; display:block; border:0 solid #FFFFFF;">
            <div id="news1" dojoType="dijit.layout.ContentPane" refreshOnShow="true"
              selected="true"  title="社会"style="float:left;"
              href="newsList.jsp?type=社会" preload="true">社会新闻
            </div>
            <div id="news2" dojoType="dijit.layout.ContentPane" title="法制"
              refreshOnShow="true" href="newsList.jsp?type=法制">
            法制新闻
            </div>
            <div id="news3" dojoType="dijit.layout.ContentPane" title="体育"
              refreshOnShow="true" href="newsList.jsp?type=体育">
            体育新闻
            </div>
            <div id="news4" dojoType="dijit.layout.ContentPane" title="娱乐"
              refreshOnShow="true" href="newsList.jsp?type=娱乐">
            娱乐新闻
            </div>
          </div>
        </div>

(4)编写获取指定类别新闻,并显示的newsList.jsp页面。该页面的关键代码如下:

        <jsp:useBean id="conn" class="com.core.ConnDB"/>
        <%
        request.setCharacterEncoding("GBK");
        String type=request.getParameter("type");              //获取新闻类别
        type=new String(type.getBytes("ISO-8859-1"),"GBK");    //对新闻类别并进行转码
        String sql="SELECT * FROM tb_news WHERE type='"+type+"'";
        ResultSet rs=conn.executeQuery(sql);                   //执行查询语句
        String path="";
        if("社会".equals(type)){                              //设置“社会”标签页显示的图片
            path="shehui.jpg";
        }else if("法制".equals(type)){                         //设置“法制”标签页显示的图片
            path="fazhi.jpg";
        }else if("体育".equals(type)){                         //设置“体育”标签页显示的图片
            path="tiyu.jpg";
        }else{                                                //设置“娱乐”标签页显示的图片
            path="yule.jpg";
        }
        <table width="520" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="241"><img src="images/<%=path%>" width="202" height="118"></td>
            <td width="289" valign="top" background="images/bg_news.jpg"
            style="background-repeat:no-repeat; background-position:bottom right">
        <table width="275" border="0" cellspacing="0" cellpadding="0">
        <%
        int id=0;
        String title="";
        while(rs.next()){                                     //通过循环输出获取的新闻标题
            id=rs.getInt("id");
            title=rs.getString("title");
          %>
          <tr><td height="22"><%=title %></td></tr>
          <%} %>
        </table>
            </td>
          </tr>
        </table>

举一反三

根据本实例,读者可以:

实现在线音乐网中新歌速递;

实现连锁培训机构的网站导航。