2014-10-19 3 views
0

Я сделал список изображений и описаний в этой HTML структуры:предотвратить .mouseout событие от выполнения

<div class="canDo"> 
    <p> 
     <img src="http://placehold.it/100x100" /> 
     <span>Description 1</span> 
    </p> 
    <p> 
     <img src="http://placehold.it/100x100" /> 
     <span>Description 2</span> 
    </p> 
    <p> 
     <img src="http://placehold.it/100x100" /> 
     <span>Description 3</span> 
    </p> 

    <p></p> 
</div> 

Я скрываю <span> с помощью CSS и добавьте описание в последнюю <p> с помощью функции JQuery. Структура HTML выбрана для работы с моей отзывчивой компоновкой.

$(document).ready(function() { 
    $(".canDo img").mouseover(function() { 
     $(".canDo img").removeClass('active').addClass('fade'); 
     $(this).addClass('active').removeClass('fade'); 
     $(".canDo p:last-child").fadeOut(function() { 
      var msg = $('.canDo img.active').next('span').html() 
      $(".canDo p:last-child").text(msg).fadeIn(); 
     }); 
    }) 
    .mouseout(function() { 
     setTimeout(function(){ 
      $(".canDo img").removeClass('active fade') 
      $(".canDo p:last-child").fadeOut(); 
     }, 3000); 
    }); 
}); 

Проблема у меня в том, что, когда я парить первый элемент, а затем второй элемент (и держать мышь на этой второй) в mouseout функции от первого элемента выполняется, что делает замирание и текст исчезает.

Как я могу предотвратить это?

Я также сделал jsFiddle.

+0

так .... если есть текст в нижнем окне ... и новый элемент hover'd над .. вы хотите, чтобы исчезнуть выход (ж/старый), а затем исчезают в (с новым) или просто всплывают новые? –

+0

обновлено http://jsfiddle.net/bpd2Ldy1/ –

ответ

1

попробуйте это ... Я думаю, что это то, что вы хотите. дайте мне знать, если это не так.

http://jsfiddle.net/bpd2Ldy1/

так ... что я сделал присвоить результат функции setTimeout (который возвращает определенный тайм-аут идентификатор) переменной tm. Если он установлен (значит, что-то исчезает через 3 секунды), а пользователь мыши - над другой маленькой коробкой, он очистит и остановит таймаут. что позволяет ему не конфликтовать с новым событием mouseover. если ничего .canDo не затушевывается, таймаут завершается непрерывно через 3 секунды.

$(document).ready(function() { 
    $(".canDo img").mouseover(function() { 
     $(".canDo img").removeClass('active').addClass('fade'); 
     $(this).addClass('active').removeClass('fade'); 

     if (typeof(tm) != 'undefined') { 
      clearTimeout(tm); 
     } 
     $(".canDo p:last-child").stop().fadeOut(function() { 
      var msg = $('.canDo img.active').next('span').html() 
      $(".canDo p:last-child").text(msg).stop().fadeIn(); 
     }); 

    }) 
    .mouseout(function() { 
     tm = window.setTimeout(function(){ 
      $(".canDo img").removeClass('active fade') 
      $(".canDo p:last-child").stop().fadeOut("slow"); 
     }, 3000); 
    }); 
}); 
+0

Спасибо за ваш ответ, я почти делаю то, что хочу. Я хотел бы добавить, что когда мышь (полностью вне списка), текст остается 3 секунды и исчезает. Это возможно? – LinkinTED

+0

@LinkinTED ... да ... если мы сможем выяснить логику. просто состояние очевидно (надеюсь) ... скажем, что 1 выбран, и они переходят на 2, вы хотите, чтобы описание для 1 осталось на 3 секунды, прежде чем показывать описание 2 ... –

+0

Нет, это может быть обменять напрямую. Но при перемещении из двух в документ *, то * описание 2 должно исчезнуть через 3 секунды. – LinkinTED

Смежные вопросы