Как изменить источник изображения при наведении? - PullRequest
1 голос
/ 13 июня 2019

Я хочу изменить источник изображения, используя jQuery, но с анимацией.

У меня прямолинейное изображение по умолчанию. У меня есть 5 разных изображений с головой, смотрящей в разные стороны. при наведении курсора на определенный раздел я хочу изменить изображение на это конкретное изображение src значение.

Если div не отображается, должно появиться прямолинейное изображение по умолчанию.

Я достиг этого, но изображения должны меняться с анимацией. Мои анимации мерцают.

Может ли кто-нибудь указать мне правильное направление?

$('#thumbs img').hover(function(event) {

  $(this).fadeOut(100, function() {
    var thisSRC = $(this).attr('src');
    $('#main').attr('src', thisSRC);
  }).fadeIn(100);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="thumbs">
  <img src="https://i.ibb.co/rxX8VMq/left.png" width="50" height="50">
  <img src="https://i.ibb.co/r77CrCC/topleft.png" width="50" height="50">
  <img src="https://i.ibb.co/CzRdRtp/top.png" width="50" height="50">
  <img src="https://i.ibb.co/L8cSs3p/topright.png" width="50" height="50">
  <img src="https://i.ibb.co/D1cjqfD/right.png" width="50" height="50">
</div>

<img id="main" src="https://i.ibb.co/3dMWhqV/default-head.png">

jsfiddle

Ответы [ 4 ]

2 голосов
/ 13 июня 2019

Учитывая тот факт, что вы используете полноразмерные изображения уже , можно использовать решение только для CSS, поскольку для загрузки больших изображений не требуется дополнительная полоса пропускания:

Только для CSS:

.thumb{ 
  width: 50px; 
  display: inline-block;
}

.thumb:hover  ~ .big .default{ opacity:0; }


.thumb:nth-child(1):hover ~ .big > img:nth-child(1){ z-index:5; opacity:1; }
.thumb:nth-child(2):hover ~ .big > img:nth-child(2){ z-index:5; opacity:1; }
.thumb:nth-child(3):hover ~ .big > img:nth-child(3){ z-index:5; opacity:1; }
.thumb:nth-child(4):hover ~ .big > img:nth-child(4){ z-index:5; opacity:1; }
.thumb:nth-child(5):hover ~ .big > img:nth-child(5){ z-index:5; opacity:1; }

.big{ position:relative; } 
.big img{ 
  position:absolute;
  top: 0;
  left: 0;
  opacity: 0;
  transition: .2s .1s ease-out;
}

.big .default{ opacity:1; }
<img src="https://i.ibb.co/rxX8VMq/left.png" class='thumb'>
<img src="https://i.ibb.co/r77CrCC/topleft.png" class='thumb'>
<img src="https://i.ibb.co/CzRdRtp/top.png" class='thumb'>
<img src="https://i.ibb.co/L8cSs3p/topright.png" class='thumb'>
<img src="https://i.ibb.co/D1cjqfD/right.png" class='thumb'>

<div class='big'>
  <img src="https://i.ibb.co/rxX8VMq/left.png">
  <img src="https://i.ibb.co/r77CrCC/topleft.png">
  <img src="https://i.ibb.co/CzRdRtp/top.png" class='default'>
  <img src="https://i.ibb.co/L8cSs3p/topright.png">
  <img src="https://i.ibb.co/D1cjqfD/right.png">
</div>

намного проще генерировать вышеуказанный CSS с помощью препроцессоров (например, SCSS)

1 голос
/ 13 июня 2019

Хорошо, так что это модифицированная версия, которая оживляет основную, а не любую из миниатюр.

  • При наведении миниатюра получает класс active
    • Основное изображение исчезло
    • Основное заменено на значок миниатюры
    • Основное исчезло в
  • В конце наведите курсор на класс active из эскиза.
    • Начало тайм-аута 300 миллисекунд
      • Если по истечении 300 миллисекунд миниатюра не активна, верните основной экран к изображению по умолчанию

var $thumbnails = $('#thumbs img');
var $main = $('#main');

$main.data('originalSrc', $main.attr('src'));

$thumbnails.on('mouseenter', function(e){
  e.target.classList.add('active');
  
  $main.finish().fadeOut(500, function(){
    $main.attr('src', e.target.getAttribute('src'));
    $main.fadeIn(500);
  });
});

$thumbnails.on('mouseleave', function(e){
  e.target.classList.remove('active');
  
  setTimeout(function(){
    if ($thumbnails.filter('.active').length < 1) {
      $main.prop('src', $main.data('originalSrc'));
    }
  }, 200);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="thumbs">
  <img src="https://i.ibb.co/rxX8VMq/left.png" width="50" height="50">
  <img src="https://i.ibb.co/r77CrCC/topleft.png" width="50" height="50">
  <img src="https://i.ibb.co/CzRdRtp/top.png" width="50" height="50">
  <img src="https://i.ibb.co/L8cSs3p/topright.png" width="50" height="50">
  <img src="https://i.ibb.co/D1cjqfD/right.png" width="50" height="50">
</div>

<img id="main" src="https://i.ibb.co/3dMWhqV/default-head.png">
1 голос
/ 13 июня 2019

  $('#thumbs img').hover(function(event){
   $('#thumbs img').finish();    
        var thisSRC=$(this).attr('src');
        $('#main').fadeTo(500, 0.5);
        $('#main').finish();
        $('#main').fadeTo(500, 1).attr('src',thisSRC);        
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="thumbs">
  <img src="https://i.ibb.co/rxX8VMq/left.png" width="50" height="50">
  <img src="https://i.ibb.co/r77CrCC/topleft.png" width="50" height="50">
  <img src="https://i.ibb.co/CzRdRtp/top.png" width="50" height="50">
  <img src="https://i.ibb.co/L8cSs3p/topright.png" width="50" height="50">
  <img src="https://i.ibb.co/D1cjqfD/right.png" width="50" height="50">
</div>

<img id="main" src="https://i.ibb.co/3dMWhqV/default-head.png">
0 голосов
/ 13 июня 2019

Сначала вы должны fadeOut, а когда он закончится, измените источник и выполните fadeIn в завершенном обратном вызове.

$('#thumbs img').hover(function(event) {
  var thisSRC = $(this).attr('src');
  $('#main').fadeOut(300, function() {
    $('#main').attr('src', thisSRC);
    $('#main').fadeIn(300)
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="thumbs">
  <img src="https://i.ibb.co/rxX8VMq/left.png" width="50" height="50">
  <img src="https://i.ibb.co/r77CrCC/topleft.png" width="50" height="50">
  <img src="https://i.ibb.co/CzRdRtp/top.png" width="50" height="50">
  <img src="https://i.ibb.co/L8cSs3p/topright.png" width="50" height="50">
  <img src="https://i.ibb.co/D1cjqfD/right.png" width="50" height="50">
</div>

<img id="main" src="https://i.ibb.co/3dMWhqV/default-head.png">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...