JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示

一、(一)中的代码还可以修改的地方。

在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include进来。这样,当要对导航栏进行修改时,只需要修改一个文件,而不用修改所有相关的页面文件。不过,我这里没有这样做,没有抽取出来。

二、实现当前页面的标识+不同页面的head头部背景图片的改变

现在在(一)实现的基础之上,来实现导航栏当前所选页面的菜单项高亮显示,让访问者一路了然知道“我正在这里”。

首先,修改color.css文件,给菜单项增加一个class="here"属性,也就是说等一下这个here是使用javascript动态增加的一个属性。现在先在控制颜色的color.css中设置here的样式声明。追加这个代码:


#navigation a.here:link,
#navigation a.here:visited,
#navigation a.here:hover,
#navigation a.here:active{
color:#eef;
background-color: #799;
}

此时,你或者可以先尝试一下,给导航栏中的其中一个<a>标签添加一个class="here"的属性,可以看到该菜单项高亮显示。

然后,来创建一个global.js,存放所有页面会用到的js。

在《JavaScript
DOM编程艺术》里面,前面几章给我们写了很多个可以使用的函数。现在把这几个有用的函数添加到global.js的文件里面来。


/******************绑定函数到onload事件上的函数*************************/
function addLoadEvent(func){ //参数func为页面加载完成要执行的函数
var oldonload = window.onload; //把现有的window.onload事件处理函数的值存入变量oldonload中
if(typeof window.onload != ‘function‘){ //判断 如果onload处理函数没绑定任何函数,则添加新函数;否则,追加新函数
window.onload = func;
}else{
window.onload = function(){ //这里使用了匿名函数包纳两个函数
oldonload();
func();
}
}
}

/*******************跟JavaScript中的insertBefore方法对应的一个函数*******************/
function insertAfter(newElement,targetElement){
var parent = targetElement.parentNode;
if(parent.lastChild == targetElement){
parent.appendChild(newElement);
}else{
parent.insertBefore(newElement,targetElement.nextElementSibling);
}
}

/******************动态添加class属性的函数*****************************/
function addClass(element,value){ //调用该函数,就是创建一个例如:class="here",给标签增加了增加了这么一个属性
if(!element.className){
element.className = value;
}else{
newClassName = element.className;
newClassName +=" ";
newClassName += value;
element.className = newClassName;
}
}

添加高亮显示的函数


/*****************高亮显示导航栏当前点击菜单***************************/
function highlightPage(){
//判断
if(!document.getElementById) return false;
if(!document.getElementsByName) return false;
if(!document.getElementById("navigation")) return false;

//获取
var nav = document.getElementById("navigation");
var links = document.getElementsByTagName("a");

//逻辑操作
for(var i =0; i<links.length; i++){
var linkurl = links[i].getAttribute("href"); //获取具有href的属性值
var currenturl = document.location.href; //获取当前的href属性值
if(currenturl.indexOf(linkurl) != -1){
links[i].className = "here";
var linktext = links[i].lastChild.nodeValue.toLowerCase(); //把提取出来的文本转换为小写
document.body.setAttribute("id",linktext);
}
}
}
addLoadEvent(highlightPage); //最后调用该函数

(1) if(currenturl.indexOf(linkurl) != -1)
indexOf()方法,可以在一个字符串中找一个子串的位置,,没有找到,返回-1,找到返回所在的位置。

(2)

var linktext = links[i].lastChild.nodeValue.toLowerCase(); //把提取出来的文本转换为小写
document.body.setAttribute("id",linktext);

获取到当前链接的最后一个子节点的值——也就是说当前链接的标识文本。
当前链接的是如此这般的:<li><a href="webDesign.html">Home</a></li>,那么获取到的最后一个子节点的值就是”Home“,此时再转换为小写,最后设置到body元素里。
这两行代码可以给body元素分别设置一个唯一的id属性值。如图:

此时主页的body是有一个id=”home“,另外我们还有一个id="header"的div,结合这两个id,就可以给不同的页面设置不同的背景图片


3、在webdesign.css添加设置每个页面的header的背景图片


#about #header{
background-image: url(../images/basshead.jpg);
}
#photos #header{
background-image: url(../images/bassist.jpg);
}
#live #header{
background-image: url(../images/drummer.jpg);
}
#contact #header{
background-image: url(../images/lineup.jpg);
}

4、为了看到效果,我们先写出一个about.html的页面,来看看导航栏菜单项和header的背景图片是否改变了

about.html


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>webDesign</title>
<link rel="stylesheet" href="style/webdesign.css" />
<link rel="stylesheet" href="style/color.css" />
<link rel="stylesheet" href="style/typography.css" />
<script type="text/javascript" src="js/global.js" ></script>
</head>
<body>
<div id="header">
<img src="images/weblogo.gif" />
</div>

<div id="navigation">
<ul>
<li><a href="webDesign.html">Home</a></li>
<li><a href="about.html">about</a></li>
<li><a href="photos.html">Photos</a></li>
<li><a href="live.html">Live</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</div><!--header部分结束-->
<div id="content">
<h1>About the band</h1>
<ul id="internalnav">
<li><a href="#jay">Jay Skript</a></li>
<li><a href="#domsters">The Domsters</a></li>
</ul>
<div class="section" id="jay">
<h2> Jay Skipt</h2>
<p>Jay Skript is going to rock your world</p>
<p>Jay Skript is going to rock your world</p>
<p>Jay Skript is going to rock your world</p>
<p>Jay Skript is going to rock your world</p>
<p>Jay Skript is going to rock your world</p>
</div>
<div class="section" id="domsters">
<h2> The Domsters</h2>
<p>The Domsters have been around,in one form or another,for almost as long.It‘s only in the past few years taht The Domsters.</p>
</div>
</div>
</body>
</html>

效果截图:两个效果都实现了


JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示,布布扣,bubuko.com

时间: 2024-10-03 06:53:18

JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示的相关文章

JavaScript网站设计实践(一)网站结构以及页面效果设计

原文:JavaScript网站设计实践(一)网站结构以及页面效果设计 这是JavaScript DOM编程艺术里的构建JavaScript网站设计的例子,这本书给我学习JavaScript带来许多启发,在这个乐队宣传网站中,把前面学到的知识点整合在这个项目了.在这里记录下实现这个乐队的宣传网站的具体过程,加深理解.好,从现在开始来实现这个JavaScript网站实战. 一.网页的结构 由三个部分组成:头部.导航.内容 效果图是这样的(勉强看,有点不美观.哈哈): 二.网站的的结构 这是我的项目目

JavaScript网站设计实践(四)编写about.html页面,利用JavaScript和DOM,选择性的显示和隐藏DIV元素

一.现在我们在网站设计(三)的基础上,来编写about.html页面. 这个页面要用到的知识点是利用JavaScript和DOM实现选择性地显示和隐藏某些DIV about.html页面在前面我们为了看导航栏菜单项高亮显示时,已经写了部分内容,只是那时写的代码没有实现div显示和隐藏,现在就在之前编写的基础上,为页面添加显示和隐藏div的效果. 没有写JavaScript之前看到的效果: 实现后的效果图: 这个就是我们现在要做的效果. 1.背景: 我们在about.html页面中写了一个ul列表

JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本

原文:JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本 一.主页一般都会比较有特色,现在在网站设计(二)实现的基础上,来给主页添加一点动画效果. 1.这里实现的动画效果是:当鼠标悬停在其中某个超链接时,会显示出属于该页面的背景缩略图,让用户知道这个链接的页面大概内容是什么. 效果图: 2.实现这个效果的思路 (1)把主页的几个链接的背景图片缩放到150px*150px,拼成一张750*150的图片,并保存为slideshow.png,存放到ima

JavaScript网站设计实践(七)编写最后一个页面 改进表单

原文:JavaScript网站设计实践(七)编写最后一个页面 改进表单 一.最后一个页面 contact.html.改进表单 在该页面实现的功能: 几乎所有的网站都会有表单填写,对于用户输入和填写的数据,首先我们一般现在前台验证,然后再去后台验证. 在前台最简单的验证:检查必填字段是否填写.填写格式是否符合要求等. 每个表单里面,当获取到输入焦点时,令提示文本消失 现在开始动手来写. 1.实现思路 (1)在这个表单里会验证的是必填字段和邮箱格式是否正确.首先,把判断必填字段和邮箱格式分别写在两个

JavaScript网站设计实践(六)编写live.html页面 改进表格显示

原文:JavaScript网站设计实践(六)编写live.html页面 改进表格显示 一.编写live.html页面,1.JavaScript实现表格的隔行换色,并且当鼠标移过时当前行高亮显示:2.是输出表格中的abbr标签的内容 实现后的效果图是这样的: 1.实现思路 在输出表格的时候,给出一个判断,如果偶数或是奇数行我们想换色,则添加一个class为odd的值,在这个class里就设置了表格不同颜色tr行. 这里用到了一个判断函数:(下面是两个不同的方法,任选其一) 法一://隔行换色 添加

JavaScript网站设计实践(五)编写photos.html页面,实现点击缩略图显示大图的效果

原文:JavaScript网站设计实践(五)编写photos.html页面,实现点击缩略图显示大图的效果 一.photos.html页面,点击每一张缩略图,就在占位符的位置那里,显示对应的大图. 看到的页面效果是这样的: 1.实现思路 这个功能在之前的JavaScript美术馆那里已经实现了. 首先在页面中使用ul列表显示出所有的缩略图,然后使用JavaScript,for循环检查出当前点击的是哪一张图片,最后把这张图片给显示出来. 用到三个函数:显示图片函数.创建占位符预装图片.点击显示图片

网站搭建 (第04天) 导航栏与页脚

一.前言 经过观察可以发现,基本上每个网站都会有一个叫导航栏的东西,其目的就是为了方便用户找到自己查看的页面.导航栏可以自己制作,但我选择的方法是使用Bootstrap框架,还有给每个网页都添加一段导航栏代码会显得特别冗余,所以这里还涉及到一个模板继承的知识点,我将模板继承知识写在了Django入门: (第八天) 模板定义与继承,方便查阅. 那么有了模板继承的知识以后,就可以给整个站点设计一个公共的代码部分-导航栏,将模板页面加入到路径中,修改settings.py文件,设置TEMPLATES的

ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

转自:http://www.cnblogs.com/mzwhj/p/3592895.html 上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东西没有理由不支持. 附件的上传同样基于KindEditor实现,可以上传图片,flash,影音,文件等. 目录 ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一)

JavaScript+CSS实现经典的树形导航栏

在一些管理系统里面,一般右侧都会有树形的导航栏,点击一下就会出现下拉菜单,显示出来该父菜单下面的子菜单 项目,然后配以图片,和CSS的效果,可以说是非常常用的功能,现在做一个项目,正好用到这个功能,于是到处寻找 资料,从Struts的Dojo插件到Dojo的学习,各种看,结果各种不懂.那个悲催啊!!!结果从头再来,苦学CSS和JS, 虽然现在JS水平不咋的,但是还是可以写出一个一般的导航菜单栏了,自己看看还是说的过去,这里拿出来Show一 下,回来自己好用. 首先上最开始的左侧菜单HTML代码