2013-11-03 185 views
6

基本上我想更改图像src在悬停上添加-active.pngjQuery - 在悬停上更改图像src

所以fb.png在悬停时会变成fb-active.png,而在不悬停时会变成fb.png。

我也不太清楚我在做什么错了,所以我会后到目前为止我的代码: -

HTML

 <div id="main-contact" class="right"> 

      <div id="main-social"> 

       <a href="#!"><img class="img-social" alt="Company - Facebook" class="left" src="images/fb.png" /></a> 

       <a href="#!"><img class="img-social" alt="Company - Twitter" class="left" src="images/twitter.png" /></a> 

       <a href="#!"><img class="img-social" alt="Company - LinkedIn" class="left" src="images/linkedin.png" /></a> 

       <a href="#!"><img class="img-social" alt="Company - Word Press" class="left" src="images/wordpress.png" /></a>    

      </div> 

     </div> 

jQuery的

$(document).ready(function() { 

$(function(){ 
    var regexactive = /-active\..*$/; 

    var ct = $('#main-social'); 
    var imgs = $('.img-social img', ct); 

    function activateImage(imgs){ 
     imgs.each(function(){ 
      var img = $(this); 
      var src = img.attr('src'); 
      if(!regexactive.test(src)){ 
       img.attr('src', src.replace('.png', '-active.png')) 
      } 
     }); 
    } 

    ct.on('hover', '.img-social', function(){ 


     var img = $('.img-social img'); 
     activateImage(img); 
    }); 
}); 

}); 
+2

为什么不直接给CSS图像精灵一个尝试? – Terry

+1

为什么你在你的html代码中添加了两个类?使用只有一个CSS,如果你想添加两个或更多,你可以添加为class =“img-social left” –

+0

^谢谢,是一个错误(没有意识到一些如何) – nsilva

回答

2

这可以做到没有JavaScript,只有CSS。 像这样:

给像facebook,tw或twitter等的图标fb不同的类。

HTML:

<div id="main-social">  
    <a href="#!"><span class="img-social fb left" title="Company - Facebook"></span></a> 
    <a href="#!"><span class="img-social tw left" title="Company - Twitter"></span></a> 
    <a href="#!"><span class="img-social ln left" title="Company - LinkedIn"></span></a> 
    <a href="#!"><span class="img-social wp left" title="Company - Word Press"></span></a> 
</div> 

CSS:

.img-social{display:inline-block;height:20px;width:20px;} 
.fb{background:url("images/fb.png");} 
.fb:hover{background:url("images/fb-active.png");} 
.tw{background:url("images/twitter.png");} 
.tw:hover{background:url("images/twitter-active.png");} 
.ln{background:url("images/linkedin.png");} 
.ln:hover{background:url("images/linkedin-active.png");} 
.wp{background:url("images/wordpress.png");} 
.wp:hover{background:url("images/wordpress-active.png");} 

您可以使用精灵效率。

+0

我打算使用-active许多其他悬停州,仍然是最好的做法,这样做还是这样吗? – nsilva

+0

@nsilva我不明白你的观点 – Hiral

+0

不用担心,有时我会忘记简单的事情,最终会使用jQuery太多,当不需要时 – nsilva

13

如果你不需要遵从旧版浏览器,你可以在CSS中做到这一点。

要做到这一点在jQuery中,你可以尝试这样的事:

$(".img-social").hover(function(){ 
    $(this).attr("src", function(index, attr){ 
     return attr.replace(".png", "-active.png"); 
    }); 
}, function(){ 
    $(this).attr("src", function(index, attr){ 
     return attr.replace("-active.png", ".png"); 
    }); 
}); 
+0

哪些旧版浏览器无法执行':hover'? – Moob

+1

多达6个IE只支持悬停在具有'href'属性的元素上:http://reference.sitepoint.com/css/pseudoclass-hover – Simon

+1

已注意。但OP * *使用'href',除了IE6是13岁! – Moob

0

还有的这样做的方法负载。最简单的方法之一是将两个状态放在同一图像中,然后在悬停时更改背景位置。这样就没有多余的等待悬停图像加载,因为它已经存在。

<div id="main-social"> 
    <a href="#!" alt="Company - Facebook" class="left fb">facebook</a> 
    <a href="#!" alt="Company - Twitter" class="left tw">twitter</a> 
    <a href="#!" alt="Company - LinkedIn" class="left li">linkedin</a> 
    <a href="#!" alt="Company - Word Press" class="left wp">Wordpress</a>    
</div> 

CSS

#main-social a { 
    width: 50px; 
    height: 50px; 
    display: inline-block; 
    text-indent:-1000px; 
    overflow:hidden; 
    background-position: left top; 
} 
#main-social a.fb { 
    background-image: url('fb.png'); 
} 
#main-social a.tw { 
    background-image: url('tw.png'); 
} 
#main-social a.li { 
    background-image: url('li.png'); 
} 
#main-social a.wp { 
    background-image: url('wp.png'); 
} 
#main-social a:hover, #main-social a.active { 
    background-position: left bottom!important; 
} 

Demo JSFiddle

2

可以使用了mouseenter,鼠标离开功能。

<a href="#" class="hover-change-img"><img src="sample1.png" class="img-responsive"></a> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
<script> 

    $("document").ready(function(){ 
     $(".hover-change-img img").mouseenter(function(){  
      $(this).attr('src','sample2.png');  
     });  
     $(".hover-change-img img").mouseleave(function(){  
      $(this).attr('src','sample1.png');  
     }); 
    }); 

</script> 
1

我使用这个脚本..基于上面的脚本...它只是在活动和原始图像之间切换。

$("document").ready(function(){ 
     $(".my_image").mouseenter(function(){  
      $(this).attr('src',function(index, attr){ 
     return attr.replace(".png", "-active.png"); 
    });  
     });  
     $(".my_image").mouseleave(function(){  
      $(this).attr('src',function(index, attr){ 
     return attr.replace("-active.png",".png");});  
     }); 
    }); 
+0

添加一些描述,它会比仅仅一段代码更有帮助。 – Billa