2 rickiyeat rickiyeat 于 2016.09.24 21:01 提问

关于js,css的一个问题

怎样实现这个导航菜单?
功能:点击导航其中一个栏目变色,再点击页面其他地方,导航没有变化
点击导航另一个栏目变色,并且之前的栏目恢复到未点击之前的状态

h5:

 <html>
<head>
    <link href="navigation.css" rel="stylesheet" type="text/css" />
    <script language="javascript" src="jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
$(function(){
    $(".menu a").focus(function(){

        $(this).addClass("cur").siblings().removeClass("cur");
    })
})
</script>
</head>
<body>
  <div class="menu">
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <del></del>
  </div>
</body>
</html>

css:

.menu a{
    display:block;
    float:left;
}
.menu
{
    font-size:14px; 
    line-height:14px;
    background:url("image/navigation/bg1.jpg") repeat-x left bottom;
    background-color:#f7f7f7;
    margin-bottom:24px;
    font-family:"Arial","Tahoma","微软雅黑","黑体";
    line-height:18px;
    padding:0px;
    margin:0px;
    text-align:center;
}
.menu a:link,.menu a:visited
{
    color:#383737;
    background-color:#f7f7f7;
    border-bottom:solid 2px #e6e6e6;    
    text-decoration:none;
    padding:10px 16px 10px 16px;
}
.menu a:hover,.menu a:focus
{
    background-color:#646464;
    border-bottom:solid 2px #2e2e2e;
    color:#fff;
}
.cur
{
    background-color:#646464;
    border-bottom:solid 2px #2e2e2e;
    color:#fff;
}

10个回答

qq_15617533
qq_15617533   2016.09.26 00:39
已采纳
 <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <link href="navigation.css" rel="stylesheet" type="text/css" />
    <script language="javascript" src="jquery.js"></script>
    <script type="text/javascript">
$(function(){
  $(".menu a").click(function(event){
  var target = event.target;
  $(target).css("background-color","#646464").siblings().css("background-color","#ffffff");
  })
})
</script>
</head>
<body>
  <div class="menu">
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <a href="#">导航一</a>
    <del></del>
  </div>
</body>
</html>

showbo
showbo   Ds   Rxr 2016.09.25 11:40

楼主你的连接href是有地址的吧,而不是死链接,发生了跳转刷新的话这个代码没用,可以看这个:网站导航栏目焦点设置

qq_29594393
qq_29594393   Ds   Rxr 2016.09.24 21:42
        $(".menu a").bind({
              focus:function(){$(this).toggleClass("red")},
              blur:function(){$(this).removeClass('red')}
        });
qq_29594393
qq_29594393 回复Lovnx: 看错了。。。
大约一年之前 回复
rickiyeat
rickiyeat 回复当作看不见: 类能给标签添加上,但是一点页面其他地方还是变了
大约一年之前 回复
qq_29594393
qq_29594393 你改一下类名就好
大约一年之前 回复
franks_t_d
franks_t_d   2016.09.24 22:08
$(function() {
    var events = {
        change: function(event) {
            var that = $(this),
                cur = event.data.current;
            that.addClass("cur").siblings().removeClass("cur");
        }
    }
    $(".menu").on("click", "a", {current: 'cur'}, events.change);
})
franks_t_d
franks_t_d   2016.09.24 22:12
上面漏替换变量了,这个是正确的。
$(function() {
    var events = {
        change: function(event) {
            var that = $(this),
                cur = event.data.current;
            that.addClass(cur).siblings().removeClass(cur);
        }
    }
    $(".menu").on("click", "a", {current: 'cur'}, events.change);
})
rickiyeat
rickiyeat 类能添加上,但是一点页面其他地方还是变了
大约一年之前 回复
franks_t_d
franks_t_d   2016.09.24 22:28

另一种组件化写法:
var changeColor = function(options) {
var config = {
trigger: '.menu',
target: 'a',
current: 'cur',
event: 'click'
};
var opts = $.extend({}, config, options);
$(opts.trigger).on(opts.event, opts.target, function(event) {
var that = $(this);
that.addClass(opts.current).siblings().removeClass(opts.current);
});
};
//实例化
new changeColor({
trigger: '.menu',
target: 'a',
current: 'cur',
event: 'click'
})

qq_29594393
qq_29594393   Ds   Rxr 2016.09.24 23:41

ok了

       $(.menu"a").bind({
              click:function(){
                $(.menu a').removeClass("cur")
                $(this).addClass("cur")
                }
        });
franks_t_d
franks_t_d 回复franks_t_d: 所以当你点击的元素和当前元素是同一个时,体验不会友好,所以推荐用.siblings()或者.not(this)排除下点击的元素
大约一年之前 回复
franks_t_d
franks_t_d 你的这个写法也算对,但是比较暴力,你是先对所有a元素进行样式移除,包括自己被点击的a元素。
大约一年之前 回复
rickiyeat
rickiyeat 回复当作看不见: 大哥,要不你执行一下这段代码,真不行,一点真好其他地方,不点导航,就啥都没有了,..,=_=
大约一年之前 回复
qq_29594393
qq_29594393 回复Lovnx: 你的这个不行,就是闪烁一下,我写的可以达到效果
大约一年之前 回复
rickiyeat
rickiyeat $(".menu a").click(function(){ $(this).addClass("cur").siblings().removeClass("cur"); })
大约一年之前 回复
qq_15617533
qq_15617533   2016.09.26 00:37






<br> $(function(){<br> $(&quot;.menu a&quot;).click(function(event){<br> var target = event.target;<br> $(target).css(&quot;background-color&quot;,&quot;#646464&quot;).siblings().css(&quot;background-color&quot;,&quot;#ffffff&quot;);<br> })<br> })<br>





把css属性转化为你想要的class,class样式自己定义,我想这难不住你吧
qq_15617533
qq_15617533   2016.09.26 00:38






<br> $(function(){<br> $(&quot;.menu a&quot;).click(function(event){<br> var target = event.target;<br> $(target).css(&quot;background-color&quot;,&quot;#646464&quot;).siblings().css(&quot;background-color&quot;,&quot;#ffffff&quot;);<br> })<br> })<br>





把css属性转化为你想要的class,class样式自己定义,我想这难不住你吧
qq_15617533
qq_15617533   2016.09.26 00:40

把css属性转化为你想要的class,class样式自己定义,我想这难不住你吧

Csdn user default icon
上传中...
上传图片
插入图片