Событие мыши два раза срабатывает в Firefox при наведении на элемент. Привести к мерцанию. Есть ли способ изменить это мерцание?

0

HTML:

<ul class="navigate">  
<li>  
    <a title="Demo01" href="###">Demo01</a>  
    <ol>  
        <li><a title="Demo01Children01" href="###">Demo01Children01</a></li>  
        <li><a title="Demo01Children02" href="###">Demo01Children01</a></li>  
    </ol>  
</li>  
<li><a title="Demo02" href="###">Demo02</a></li>  
</ul>

Javascript:

$("ul.navigate>li").mouseenter(function(){  
  $(this).children("a").slideDown();  
  console.log("hover");  
}).mouseleave(function(){   
  $(this).children("a").slideUp();  
  console.log("out");  
});  

Запустив html и JS в firefox, я вижу, что вывод "hover, out, hover" в firefox Firefox, когда мышь наводится каждый раз. На самом деле это не моя цель, которая выводит только "зависание". Доза любой может помочь мне решить проблему?

Теги:
mouse

3 ответа

1

Я думаю, причина, по которой вы получаете мерцание, состоит в том, что li включает маркер. По мере ввода с левой стороны, вы попали в точку пули (вызвать in), то пустое пространство (вызвать out), затем текст iteself (триггер in раз).

Если вы добавите в демоверсию следующий CSS:

li{
   list-style-type: none;
}

Вы находите, что поведение исчезает?

С другой стороны: добавление поведения "зависания" на движущийся (скользящий) элемент, вероятно, очень плохая идея!

Кодепэн здесь, чтобы продемонстрировать.

0

Без изменения разметки я немного изменил ваш javascript, чтобы выглядеть так:

$("ul.navigate > li").mouseenter(function(){  
    $(this).find("li").slideDown();  
    console.log("hover");  
}).mouseleave(function(){   
    $(this).find("li").slideUp();  
    console.log("out");  
});  

Предлагаемый, я также применяю display: none для детского меню

Демо: http://jsfiddle.net/C2nVz/1/

Примечание. Демонстрация также включает list-style-type: none, как было предложено Ed, что вызывает несколько событий mouseover и mouseleave.

0

У вас проблемы, потому что вы скользящие элементы, которые быстро называют события снова! Взгляните на этот jsfiddle, где я прокомментировал вырезанные линии.

Я предлагаю вам рассказать нам, как вы хотите, чтобы ваш код работал (нужна ли скользящая?), Тогда мы сможем найти решение.

В основном я изменил свой код на:

$("ul.navigate>li").mouseenter(function()
{  
    //$(this).children("a").slideDown();  
    console.log("hover");  
}).mouseleave(function()
{   
   //$(this).children("a").slideUp();  
   console.log("out");  
}); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню