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

简介: 原文:JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示一、(一)中的代码还可以修改的地方。 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include进来。
原文: 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>

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



































 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录
相关文章
|
5月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
1月前
|
编解码 前端开发 JavaScript
js react antd 实现页面低分变率和高分变率下字体大小自适用,主要是配置antd
在React中结合Ant Design与媒体查询,通过less变量和响应式断点动态调整`@font-size-base`,实现多分辨率下字体自适应,提升跨设备体验。
65 2
|
6月前
|
前端开发 JavaScript Java
【Java进阶】JavaScript电灯开关实例:从理论到实践
这个例子展示了JavaScript的基本功能,包括操作HTML元素,监听事件,以及改变元素的样式。通过学习和理解这个例子,你可以了解到JavaScript在网页中的应用,以及如何使用JavaScript来创建交互式的网页。
117 13
|
5月前
|
人工智能 监控 前端开发
基于 Next.js 的书法字体生成工具架构设计与 SSR 优化实践
本项目是一款书法字体生成工具,采用 Next.js 14(App Router)与 Tailwind CSS 构建前端,阿里云 Serverless 部署后端。通过混合渲染策略(SSG/SSR/CSR)、Web Worker 异步计算及 CDN 字体分片加载优化性能。服务端借助阿里云函数计算处理计算密集型任务,将平均耗时从 1200ms 降至 280ms,支持 1000+ QPS。动态路由与 ARMS 监控提升工程化水平,未来计划引入 WebGPU 和 AI 字体风格迁移技术,进一步优化用户体验。
|
8月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
292 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
8月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
232 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
9月前
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
242 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
7月前
|
JavaScript 前端开发 API
纯js轻量级页面顶部Loading进度条插件
纯js轻量级页面顶部Loading进度条插件
|
7月前
|
缓存 自然语言处理 JavaScript
JavaScript中闭包详解+举例,闭包的各种实践场景:高级技巧与实用指南
闭包是JavaScript中不可或缺的部分,它不仅可以增强代码的可维护性,还能在模块化、回调处理等场景中发挥巨大作用。然而,闭包的强大也意味着需要谨慎使用,避免潜在的性能问题和内存泄漏。通过对闭包原理的深入理解以及在实际项目中的灵活应用,你将能够更加高效地编写出简洁且功能强大的代码。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
203 11

热门文章

最新文章