jQuery - область при наведении курсора не должна быть при наведении div внутри (над) img (с использованием карты)

У меня есть img (позиция: абсолютная) и div с текстом над ним (позиция: абсолютная). У img есть карта изображения, и проблема в том, что, когда я хочу изменить непрозрачность img при наведении курсора и выходе из области, он вызывает mouseleave, когда я навожу div на изображение. Есть ли простое и элегантное решение для решения этой проблемы?

РЕДАКТИРОВАТЬ: я думаю, что решил это с помощью CSS: я дал «указатель-события: нет» для div над изображением.


person Luca Nate Mahler    schedule 20.07.2013    source источник
comment
Я думаю, что это не обязательно... Потому что логично, что зависание изображения прекращается, когда над ним находится div (и над областью изображения)... Но я думаю, что для этого есть некоторые хитрости :)   -  person Luca Nate Mahler    schedule 20.07.2013
comment
css-свойство pointer-events не поддерживается IE   -  person chrisweb    schedule 20.07.2013
comment
Да, это проблема... Хм, я не знаю, что еще может быть таким умным :)   -  person Luca Nate Mahler    schedule 20.07.2013


Ответы (2)


вы можете использовать вложенное условие:

если(мышь проходит по изображению)

{ if (мышь находится над этим изображением || если мышь находится над div)

 {

     do the job;

 }

}

person Community    schedule 20.07.2013

Вы можете продублировать код, который вы использовали для изображения, и применить его к div

скажем, при mouseenter img вы устанавливаете значение opcaity, затем делаете то же самое при mouseenter div, когда mouseenter div изменяет opcity изображения, а затем также дублируете код mouseleave, чтобы opcaity устанавливалось обратно если пользователь покидает либо div, либо изображение:

я сделал скрипку: http://jsfiddle.net/KpVag/

$('img').on('mouseenter', function() {
    $(this).css('opacity', '0.4');
});

$('img').on('mouseleave', function() {
    $(this).css('opacity', '1');
});

$('div').on('mouseenter', function() {
    $('img').css('opacity', '0.4');
});

$('div').on('mouseleave', function() {
    $('img').css('opacity', '1');
});

[EDIT] Увидев ваш комментарий, я обновил скрипку: http://jsfiddle.net/KpVag/1/

Я сейчас использую stop, чтобы остановить анимацию затухания, поэтому, если мышь покидает изображение, мы запускаем анимацию, но если следующим событием будет mouseenter на нашем div, то мы отменяем анимацию затухания изображения, если после mouseleave есть если в div нет mouseenter, то анимация не отменяется:

$('img').on('mouseenter', function (event) {
    console.log('wrapper mouseenter');
    $(this).stop().fadeOut('slow', function () {
        // on animation finish
    });
});

$('img').on('mouseleave', function (event) {
    console.log('wrapper mouseleave');
    $(this).fadeIn('slow', function () {
        // on animation finish
    });
});

$('div').on('mouseenter', function (event) {
    console.log('wrapper mouseleave');
    // stop the image fadein animation
    $('img').stop();
});

[/РЕДАКТИРОВАТЬ]

person chrisweb    schedule 20.07.2013
comment
Спасибо за это, но есть следующая проблема: я хочу затухать() div, когда мышь покидает область... Поэтому, когда я навожу курсор на div, дело до fadeOut(), и из-за этого область снова распознается ... - person Luca Nate Mahler; 20.07.2013
comment
Я обновил скрипку, это то, что вы имеете в виду? jsfiddle.net/KpVag/1 - person chrisweb; 20.07.2013
comment
Но вот проблема, когда вы зависаете быстро. Тогда это выглядит неправильно. - person Luca Nate Mahler; 20.07.2013
comment
без кода трудно угадать, какое решение может быть лучшим, поставьте скрипку и добавьте ссылку на свой вопрос - person chrisweb; 20.07.2013