в jQuery - смена картинки при наведении
В основном я хочу изменить изображение src, чтобы добавить -active.png при наведении.
Итак, fb.png станет FB-активным.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);
});
});
});
5 ответов:
Это можно сделать без javascript, только с css. Вот так:
Дайте различные классы для иконок, таких как
fbдля facebook,twили twitter и так далее.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");}Вы можете использовать спрайт для повышения эффективности.
Вы можете сделать это только в 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"); }); });
Вы можете использовать функции mouseenter, mouseleave.
<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>
Я использую этот скрипт.. исходя из вышеизложенного сценария... он просто переключается между активным и исходным изображением.
$("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");}); }); });
Есть масса способов сделать это. Один из самых простых состоит в том, чтобы иметь два состояния в одном изображении, а затем просто изменить положение фона при наведении. Таким образом, нет никакого дополнительного ожидания загрузки изображения при наведении, поскольку оно уже есть.
<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; }
Comments