Отменить привязку события на множестве img - PullRequest
4 голосов
/ 23 декабря 2011

У меня проблема с набором изображений.Моя цель - показать похожее изображение при наведении миниатюры и скрыть его при развертывании изображения.Проблема в том, что мне нужно поставить задержку () из-за наведения мыши на дизайн модуля, имеющего 3 столбца, довольно сложно достать изображения в среднем столбце.Эта задержка заставляет зависание ставиться в очередь, показывая другим изображения, связанные с другими большими пальцами, которые вы парили.Это разметка:

<ul id="module">
  <li>
     <a href="#">
      <img src="thumbnail-image-1.jpg"> 
      <img src="image-1.jpg">
    </a>
  </li>
  <li>
    <a href="#">
      <img src="thumbnail-image-2.jpg"> 
      <img src="image-2.jpg">
    </a>
  </li>
  ...
</ul>

А это js:

$('#module li a').each(function(i){
    $_imgs = $(this).find('img');
    $_imgs.eq(0).mouseover(function() {
        $(this).next().delay(800).fadeIn('slow');
    });
    $_imgs.eq(1).mouseout(function() {
        $(this).fadeOut('slow');
    });
});

Я думаю, что решение заключается в установке unbind () ... Спасибо.

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Я добавил класс .tn к эскизам, но вы можете изменить его на свое решение .eq, если хотите.

Javascript (требуется jQuery 1.7)

$(function(){

    var timeout = false;

    $('#module > li').on('hover', 'a', function(e){
        var $elem = $(this).find('.tn');
        if(e.type == 'mouseenter'){
            timeout = setTimeout(function(){
                $elem.fadeIn();
            }, 800);   
        }
        else{
            timeout && clearTimeout(timeout);
            $elem.stop().fadeOut();
        }
    });

});

Посмотрите, как это работает здесь: http://jsfiddle.net/aX836/

1 голос
/ 23 декабря 2011

используйте setTimeout(), чтобы вызвать задержку.setTimeout возвращает уникальный идентификатор, и используя этот идентификатор, вы можете вызвать clearTimeout(id) и очистить таймер при наведении мыши.

0 голосов
/ 23 декабря 2011

Попробуйте это:

$('#module li a').each(function(i){
    var $_imgs = $(this).find('img'), timeout, $next;
    $_imgs.eq(0).mouseover(function() {
        clearTimeout(timeout);
        $next = $(this).next();
        timeout = setTimeout(function() {
            $next.fadeIn('slow');
        }, 800);
    });
    $_imgs.eq(1).mouseout(function() {
        $(this).fadeOut('slow');
    });
});
...