导航点击选中效果重构

简介:

一、场景

最近做重构,有一个功能是,鼠标点击链接后显示不同样式:

代码如下,样式布局我修改后如下,使用bootstrap框架来做。

复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <title>starof test</title>
    <style type="text/css">
.menu{
border-radius:4px;
background-color:#f8f8f8;
padding:10px;
margin-top:30px;
}
.menu p{
font-size:26px;
margin-bottom:25px;
color:#76caea;
padding-left:30px;
margin-top:15px;
}
.menu .nav-pills > li > a:hover{
background-color:#8fd4e6;
}
/*page1.html页面定义*/
.menu01{
background-color:#5dc1d1;
border-radius:4px;
}
/*page2.html页面定义*/
/*.menu02{
background-color:#5dc1d1;
border-radius:4px;
}*/
/*page3.html页面定义*/
/*.menu03{
background-color:#5dc1d1;
border-radius:4px;
}*/
    </style>
</head>
<body>
<div class="col-md-2 menu">
    <p>
        <span class="glyphicon glyphicon-user"></span>&nbsp;&nbsp;<span>starof</span>
    </p>
    <ul class="nav nav-pills nav-stacked">
        <li class="menu01"><a href="page1.html">page1</a></li>
        <li class="menu02"><a href="page2.html">page2</a></li>
        <li class="menu03"><a href="page3.html">page3</a></li>
    </ul>
</div>
</body>
</html>
复制代码

现在重点说一下:功能实现。

原来代码是这样实现链接点击样式的,给每个链接不同的class,

<li class="menu01"><a href="page1.html">page1</a></li>
<li class="menu02"><a href="page2.html">page2</a></li>
<li class="menu03"><a href="page3.html">page3</a></li>

然后在page1.html页面定义:

.menu01{
background-color:#5dc1d1;
border-radius:4px;
}

同理在page2.html页面定义:

.menu02{
background-color:#5dc1d1;
border-radius:4px;
}

在page3.html页面定义:

.menu03{
background-color:#5dc1d1;
border-radius:4px;
}

menu菜单这个模块是page1.html,page2.html,page3.html三个页面公共模块,通过include来共享。这样在调用不同页面时,其他链接的样式不生效。所以可以实现被点击的链接显示不同样式的效果。

但是这样的做法是非常糟糕的。同一个样式有多少个页面就重写多少次,不同class名称对应的却是同样的样式。

这样的代码我是无法忍受的。下面用一小段js来实现同样功能。

二、用js重构

代码如下:

复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <title>starof test</title>
    <style type="text/css">
.menu{
border-radius:4px;
background-color:#f8f8f8;
padding:10px;
margin-top:30px;
}
.menu p{
font-size:26px;
margin-bottom:25px;
color:#76caea;
padding-left:30px;
margin-top:15px;
}
/*下面这样写是为了提高选择器的优先级*/
.menu .nav-pills > li > a:hover{
background-color:#8fd4e6;
}
.clickstyle{
background-color:#5dc1d1;
border-radius:4px;
}
    </style>
</head>
<body>
<div class="col-md-2 menu">
    <p>
        <span class="glyphicon glyphicon-user"></span>&nbsp;&nbsp;<span>starof</span>
    </p>
    <ul class="nav nav-pills nav-stacked">
        <li><a href="#">page1</a></li>
        <li><a href="#">page2</a></li>
        <li><a href="#">page3</a></li>
    </ul>
</div>
<script type="text/javascript">
    var oLis=document.getElementsByTagName("li");
    var i,j;
    var length=oLis.length;
    for(i=0;i<length;i++){
        oLis[i].onclick=function(){
            for(j=0;j<length;j++){
                oLis[j].className="";
            }
            this.className+="clickstyle";
        }
    }
</script>
</body>
</html>
复制代码

三、类似的效果

实现方式如下:通过判断用户请求的url和是哪个,就给哪个添加active样式。

复制代码
    <div class="btn-toolbar">
        <div class="btn-group">
            {% url "addpermissionurl" as theaddpermissionurl %}
            <a class="btn btn-default {%if request.path = theaddpermissionurl%} active {%endif%}" href={{ theaddpermissionurl }}><span class="glyphicon glyphicon-edit"></span>新建权限</a>
            {% url "listpermissionurl" as thelistpermissionurl %}
            <a class="btn btn-default {%if request.path = thelistpermissionurl%} active {%endif%}" href={{ thelistpermissionurl }}><span class="glyphicon glyphicon-list"></span>权限列表</a>
        </div>
    </div>
复制代码

 

 

 

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4612411.html有问题欢迎与我讨论,共同进步。

 

相关文章
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1102 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1776 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
708 152
|
12天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
664 14
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
467 5