Jquery mouseover/mouseout IE8 Колебания

У меня есть меню Jquery, которое отображает вспомогательную навигацию, используя jquery .addclass и .css. Я добавляю классы и манипулирую css с наведением мыши и отведением мыши. В Firefox, Chrome и Safari все работает нормально, но в IE8 кажется, что между классами "мерцает".

Это трудно объяснить, но если вы посмотрите на мою ссылку в FF и IE, вы поймете, что я имею в виду.

http://trustmarkstaging.com/

Вот мой jQuery:

<script>

$(document).ready(function(){

$("#nav .item-466").mouseover(function(){
 $("#selector").addClass("item-466-selector");
 $("#nav .menu .current ul li").css("display", "none");
 $("#nav .menu .active ul li").css("display", "none");
 $("#nav .menu .item-466 ul li").addClass("highlight");
});
$("#nav .item-466").mouseout(function(){
 $("#selector").removeClass("item-466-selector");
 $("#nav .menu .current ul li").css("display", "inline");
 $("#nav .menu .active ul li").css("display", "inline");
 $("#nav .menu .item-466 ul li").removeClass("highlight");
});

 $("#nav .item-470").mouseover(function(){
 $("#selector").addClass("item-470-selector");
 $("#nav .menu .current ul li").css("display", "none");
 $("#nav .menu .active ul li").css("display", "none");
 $("#nav .menu .item-470 ul li").addClass("highlight");
});
 $("#nav .item-470").mouseout(function(){
 $("#selector").removeClass("item-470-selector");
 $("#nav .menu .current ul li").css("display", "inline");
  $("#nav .menu .active ul li").css("display", "inline");
 $("#nav .menu .item-470 ul li").removeClass("highlight");
});
$("#nav .item-472").mouseover(function(){
 $("#selector").addClass("item-472-selector");
 $("#nav .menu .current ul li").css("display", "none");
 $("#nav .menu .active ul li").css("display", "none");
 $("#nav .menu .item-472 ul li").addClass("highlight");
});
$("#nav .item-472").mouseout(function(){
 $("#selector").removeClass("item-472-selector");
 $("#nav .menu .current ul li").css("display", "inline");
  $("#nav .menu .active ul li").css("display", "inline");
 $("#nav .menu .item-472 ul li").removeClass("highlight");
});

$("#nav .item-473").mouseover(function(){
 $("#selector").addClass("item-473-selector");
 $("#nav .menu .current ul li").css("display", "none");
 $("#nav .menu .active ul li").css("display", "none");
   $("#nav .menu .item-473 ul li").addClass("highlight");
});
$("#nav .item-473").mouseout(function(){
 $("#selector").removeClass("item-473-selector");
 $("#nav .menu .current ul li").css("display", "inline");
 $("#nav .menu .active ul li").css("display", "inline");
 $("#nav .menu .item-473 ul li").removeClass("highlight");
});

$("#nav .item-474").mouseover(function(){
 $("#selector").addClass("item-474-selector");
 $("#nav .menu .current ul li").css("display", "none");
 $("#nav .menu .active ul li").css("display", "none");
 $("#nav .menu .item-474 ul li").addClass("highlight");
});
$("#nav .item-474").mouseout(function(){
 $("#selector").removeClass("item-474-selector");
 $("#nav .menu .current ul li").css("display", "inline");
 $("#nav .menu .active ul li").css("display", "inline");
 $("#nav .menu .item-474 ul li").removeClass("highlight");
});
});

</script>

Мой CSS:

<style>
#nav .menu li {
list-style: none;
display: inline;
float: left;
border-radius: 10px;
padding: 10px 16px;
margin-left: 3px;
}

.highlight {
display: inline!important;
}
</style>

HTML устроен следующим образом:

<ul id="nav">
<li class="item-466 active">Page 1</li>
    <ul>
        <li>SubPage1</li>
        <li>SubPage2</li>
        <li>SubPage3</li>
    </ul>
<li class="item-470">Page 2</li>
<li class="item-472">Page 3</li>
<li class="item-473">Page 4</li>
</ul>

Любая помощь будет оценена по достоинству! Заранее спасибо. :)


person Nicole McCoy    schedule 02.12.2011    source источник
comment
#selector управляет стрелкой под навигацией. Я удалил остальной код, связанный с #selector, потому что он не имеет ничего общего с сокрытием и отображением подменю. Извините за путаницу. Я должен был удалить его там. Я не хотел, чтобы вам всем приходилось копаться в ненужном коде.   -  person Nicole McCoy    schedule 02.12.2011


Ответы (1)


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

Попробуйте изучить mouseenter и mouseleave, а не mouseover и mouseout.

Кроме того, проблема проявляется и в браузерах, отличных от IE — я вижу это и в Chrome, но этого следовало ожидать.

РЕДАКТИРОВАТЬ: Только что еще раз посмотрел на страницу в Chrome, и я не вижу мерцания, не уверен, изменили ли вы его или оно просто причудливое. В любом случае, надеюсь, мой ответ поможет.

person Darek Rossman    schedule 02.12.2011
comment
Спасибо, Дерек, я должен был упомянуть, что уже пробовал mouseenter и mouseleave. Я получаю те же проблемы. - person Nicole McCoy; 02.12.2011
comment
Вы знаете, теперь, когда я смотрю на него поближе, я замечаю, что мерцание происходит только тогда, когда ваше большое изображение баннера переходит к «Тестовому заголовку 3»… когда оно находится на тестовом заголовке 1 или 2, я не вижу проблемы. Скорее всего, между вашей навигацией и областью ползунка/фейдера изображения возникают конфликты. - person Darek Rossman; 02.12.2011
comment
Дарек, что касается вашего редактирования, единственная причина, по которой вы не видите мерцания в Chrome, вероятно, заключается в том, что Chrome настолько быстр, что вы его не замечаете. Но он есть, и проблема именно такая, как вы описали, mouseenter/mouseleave решает его проблему. - person Clarence Liu; 05.10.2012