В настоящее время я переключаю меню своего сайта с чистого JavaScript на jQuery. Мое меню имеет эффект выкатывания/выкатывания.
Меню имеет внешнюю оболочку с установленным событием onmouseout. Если это срабатывает, связанныйTarget проверяется, является ли он дочерним элементом внешней оболочки. Если нет, произойдет роллин.
Что происходит прямо сейчас, так это то, что если мышь перемещается из внутренней оболочки меню (это для центрирования фактического меню) во внешнюю оболочку меню, срабатывает onmouseout. Кажется, есть крошечная часть, которая не принадлежит menuOuterWrapper.
Сайт сейчас недоступен, поэтому я подготовил Fiddle здесь. Вы увидите проблему, если переместите указатель мыши из серой области над ручкой в левую или правую темную область. Меню появится, а затем сразу же исчезнет. Роллинг должен происходить только тогда, когда мышь перемещается из внешней оболочки, то есть под темно-серую область (или светло-серую область ручки). Чтобы увидеть темно-серые области, вам, возможно, придется увеличить ширину блока результатов. [РЕДАКТИРОВАТЬ: я уменьшил внутреннюю ширину до 600 пикселей, поэтому теперь темные области должны быть видны по умолчанию.]
SO говорит мне, что я должен включать код при ссылке на JSFiddle. Я не хочу нарушать правила, но буду честен: я понятия не имею, откуда взялась проблема. Моя лучшая идея заключается в том, что я допустил ошибку в своей реализации isChildOf, поэтому я дам вам это:
jQuery.fn.isChildOf = function (parentId) {
if ($(this).parents("#" + parentId).length > 0) {
return true;
} else {
return false;
}
};
$('#outer').on('mouseout', function(event) {
if (!$(event.relatedTarget).isChildOf("outer")) {
mouseIsOverMenu = false;
menu_rollin();
}
});
Хотя это минимальный пример, я сделал почти то же самое с чистым JS, где все работало нормально. Так что я предполагаю, что это что-то в части jQuery. Поскольку это мои первые шаги с jQuery, это даже более вероятно.
Любая помощь, которую вы можете оказать, высоко ценится :)
[ОБНОВЛЕНИЕ]
У меня это работает сейчас. Проблема заключалась в том, что я не проверял связанную цель как «внешнюю». Поэтому, когда мышь покидает div содержимого и входит во внешний div, срабатывает mouseout и, конечно же, external не является дочерним элементом самого себя. Поэтому я изменил его на
$('#outer').on('mouseout', function(event) {
if (!(event.relatedTarget.id == "outer") &&
!$(event.relatedTarget).isChildOf("outer")) {
mouseIsOverMenu = false;
menu_rollin();
}
});
и это решило проблему.
addon
илиplugin
в вашем браузере, которые могут чему-то мешать! - person NoobEditor   schedule 19.12.2013