刷新页面后怎样让hover样式停留不消失

一、网站导航栏

  我们所熟知的网站导航栏,无非就是网站标题以横、纵向方式排列,用户点击以后进入相应的页面来展示网站内容,达到传达信息的目的。

  

  用户点击进入一个页面,如果在刷新后此导航栏有文字有相应的颜色、背景变化,那么将会有一个很好的用户体验,此时就涉及到CSS的hover样式、jQuery的触发事件了。

二、hover样式

鼠标扫过文字时,文字的背景、颜色变化,这样做很简单:

a:hover{},一句话就可以搞定;但如果要点击刷新后仍然存在鼠标刷新的样式,就有点上层次了。

具体问题具体分析:

1、根据使用的不同框架来定

2、CMS自己封装了相应的方法

3、导航栏单独做成头部文件,利用ajax无刷新技术得以实现头部无刷新,只变化内容区域就更简单点

4、导航栏每个按钮都有固定的、以ID结尾的链接(以DEDE为例)

/plus/list.php?tid=1、

/plus/list.php?tid=2、

/plus/list.php?tid=3、

/plus/list.php?tid=4

三、简单实现步骤

下面就讲第四种情况的实现方法(其它3种因为本人能力有限,待以后继续更新):

HTML :很简单的导航条代码

    <ul>    
        <li><a href="/plus/list.php?tid=1"></a></li>
        <li><a href="/plus/list.php?tid=2"></a></li>
        <li><a href="/plus/list.php?tid=3"></a></li>
        <li><a href="/plus/list.php?tid=4"></a></li>
        <li><a href="/plus/list.php?tid=5"></a></li>
    </ul>

jQuery: hover方法、each方法判断是当前页面第一个a标签对象的href属性

    $(function(){    
        $("ul>li").hover(function(){
            $(this).children("a").addClass("");
        },function(){
            $(this).children("a").removeClass("");
            
            $("ul>li>a").each(function(){
                $this = $(this);
                if ($this[0].href == String(window.location)){
                    $this.addClass("");
                }
            });
        });
        $("ul>li>a").each(function(){
            $this = $(this);
            if ($this[0].href == String(window.location)){
                $this.addClass("");
            }
        });
    });

因为有多个a标签,所以要遍历当前页面所在第一个a标签对象,获取它的href属性,来与所在页面链接做对比,如果符合就添加对应的hover css样式;但问题来了,样式已经添加,鼠标经过此文字离开时又移除了该属性,我们再次将下面这条语句复制进hover移除后的句子后面,再次强制添加该属性,就成功解决了!

四、遗留问题、改进方向

1、 /plus/list.php?tid=1,该导航按钮此时有了我们需要的样式,但如果点击此导航页面下面的子链接,页面变成了子链接所在的页面,但还属于此导航栏目的子栏目,此时的导航按钮就失去了样式。

2、利用jQuery实现浏览器兼容性更加好,css3等新技术可以对自己的个人网站做实验。

3、能让子栏目智能识别父栏目才是解决问题的最好办法。

时间: 2024-08-08 21:12:53

刷新页面后怎样让hover样式停留不消失的相关文章

解决html中刷新页面后checkbox还选中的问题

今天在测试代码时候发现在电脑360浏览器和手机浏览器中的checkbox选中后,按f5刷新页面后checkbox还是选中的. 解决方法是:将 autocomplete="off"  这个配置在from上或者你的checkbox上. <form autocomplete="off"> <input id="butAll" style="vertical-align:middle;" type="che

浏览器刷新页面后向服务器发出两次请求的问题

1.1.1 现象 在IE和FireFox下刷新页面,发现服务器接收到两次相同的请求. 1.1.2 原因 经过验证,发现是页面中包含了如下代码: <img src=\'#\'" /> 此处src为空字符串,浏览器会认为src指向的是当前页面,由于img元素是根据src来获得图片数据的,因此当浏览器第一次请求后显示页面,在解析到此处时将会产生第二次相同请求. 在开发中src临时为空的情况还是比较常见,当出现服务器接收到多次相同请求时,可以想想是否是这种原因. 1.1.3 解决 确保img

【Lua】遍历目录结果输出到页面中,刷新页面后出现500 Internal Server Error

在通过lua获取目录json字符串,然后作为数据源,通过Extjs生成树的过程中,发生了一个奇怪的问题,那就是获取目录json字符串然后传递给Extjs生成树的这个过程中,一开始都是很顺利的就生成了,不过再刷新页面的时候,json字符串突然收不到了,由于没有更改任何内容,两次操作的代码环境都是一样的,仅仅是刷新了页面,重新再次获取这个过程.结果就出现了问题. 百思不解,以为是Extjs的问题,各种配置均没有效果,然后就想着是否是json字符串的问题,于是在页面内直接访问lua文件,第一次成功返回

selected 刷新页面后selected选中的值保持不表(thinkphp 从控制器assign 传值到js)

昨晚解决select 刷新页面以后选择的值保持不变,要想让seleted不变,有两种思路, 1,在提交表单的时候,将所选择的option的属性设为checked . 2.将option的value或者index带走,事实上这个提交的时候直接就带走了value,创建一个数组,php 用array_search()找到value的index的值,刷新过后再将index的值传入,使用jquery.在页面加载完毕的时候将该index的值选为checked. 我选择的是第二种方法.代码如下,亲测有效: 前

页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置

当div中绑定数据,给它一个属性overflow-y: scroll,添加长度大小,使其能够出现滚动条:每次刷新的时候滚动条总是会出现在最上方,这使我很头疼,经过查阅网上资料,返现两种方法可行.如下: 第一种方案 将上一个页面的div的scrolltop距离长度记录在cookie中,然后通过js调整刷新页面时的长度记录,代码如下: js代码: <script> var _h = 0; function SetH(o) { _h = o.scrollTop SetCookie("a&q

js关闭或者刷新页面后执行事件

onbeforeunload 使用方法 window.onbeforeunload=function(){ return ''; } 有返回值才能弹出显示,或者有需要执行的事件也行. 原文地址:https://www.cnblogs.com/jpfss/p/8444907.html

jquery mobile页面跳转后,必须重新刷新页面js方可有效

最近在做个项目,用到jquery mobile,很陌生对他,问题一个个的来,那就要一个个解决,找了一天这个问题,放可明白:首先明白jqm里面页面跳转默认都是通过ajax请求的,必须重新刷新页面js方可有效,也就是js没有起作用,并不是js本身的问题,下面说说解决方法:在使用jQuery Mobile进行Web开发中,当页面跳转时(pageA => pageB),在pageB中引用的JS并未成功运行.因为,JQM并为将整个页面加载到当前的dom中,仅将data-role="page"

vue:解决使用param传参后,再次刷新页面会新增一个原有的tab

问题:在最近的项目中,我通过传递不同的参数,复用同一组件进行渲染,然而意外出现一个bug,就是当我重新刷新该页面时,会新增一个tab 原来的: 刷新页面后: 查阅资料后,发现该现象是由于通过params进行传递的参数引起的,params进行传参后再次刷新页面,参数丢失,导致fullpath不一致,从而新增了页面(而我使用的d2admin基于element-ui第三方框架) 解决方案:将params方式传参改为使用query传参,这样参数就不会因为刷新而丢失 参考: https://juejin.

刷新页面让显示区域回到顶部

当你页面浏览到某个位置的时候,大部分浏览器会记录你的浏览位置,当你刷新页面后,还是会显示你刷新前看到的位置. 当需要刷新后回到页面顶部的时候,你用window.onload =function(){$(window).scrollTop(0)}页面还是会在你当前显示的位置. 我猜想这是浏览器最后执行的事件,然后我就给10毫秒延迟,果然就能成功回到顶部了. window.onload = setTimeout(function(){$(window).scrollTop(0)},10); 不用JQ