fadeIn элемент fadeOut при наведении другого, не работает должным образом

0

У меня есть этот HTML:

<div id="mask"></div>
<div id="menu">
    <ul>
        <li><a href"#"></a></li
        <li><a href"#"></a></li
        <li><a href"#"></a></li
    </ul>
</div

И CSS:

#mask {
    position:fixed;
    width:100%;
    height:100%;
    left:0;
    top:0;
    z-index:130;
    background-color:rgba(10,10,10, 0.6);
    display: none;
}

Я хочу, чтобы #mask появлялась с fade на #menu hover, и я делаю это с помощью следующего jquery:

<script type="text/javascript">
   $(function(){
     $('#menu').hover(over, out);
   });

   function over(event)
   {
     $('#mask').fadeIn(1000);
     $('#mask').css("display","block");
   }
   function out(event)
   {
     $('#mask').fadeOut(1000);
   }
 </script>

Он работает нормально, но проблема в том, что если мышь много раз перемещается в и из #меню до истечения тайм-аута 1сек, тогда # маска продолжает исчезать и выходить за столько раз, когда мышь перемещалась и выходила из меню... мне нужно что-то в коде, чтобы остановить запуск действия наведения на 1 с после первого триггера.

Надеюсь, ты понял, что я имею в виду.

Спасибо.


SOLVED, немного работая над идеей Крейга Ритера с помощью метода.stop(). добавлена одна строка перед.fadeIn

<script type="text/javascript">
$(function(){
    $('#menu-eng').hover(over, out);
});
function over(event)
{      
$('#mask').stop("opacity","0.9");       
$('#mask').fadeIn(1000);
$('#mask').css("display","block");
}
function out(event)
{      
$('#mask').fadeOut(1000);
}
</script>
  • 0
    ссылка на скрипку на jsfiddle.net была бы очень полезной
  • 0
    Вы можете отменить привязку к событию и повторить привязку после его завершения?
Теги:

3 ответа

0
Лучший ответ

Похоже, анимация jQuery находится в очереди и продолжает выполняться. Вы должны попытаться использовать метод .stop() прежде чем делать .fadeIn() чтобы вы могли завершить старую анимацию.

http://api.jquery.com/stop/

  • 0
    Спасибо, добавление .stop () до того, как .fadeIn решает эту проблему, но создает еще одну, когда в следующий раз при наведении курсора на #menu #mask загружается с меньшей непрозрачностью и, наконец, становится невидимым, мне нужно перезагрузить страницу, чтобы fadeIn снова заработал , ваше решение близко, но нужно что-то большее ...
  • 0
    РЕШИТЬ !!! немного поработав над своей идеей с .stop, я добавил «непрозрачность», «0,6», и поэтому маска всегда возвращается с правильной непрозрачностью, код такой: <script type = "text / javascript"> $ (function () {$ ('# menu-eng'). hover (over, out);}); function over (event) {$ ('# mask'). stop ("opacity", "0.9"); $ ( '# Маска') FadeIn (1000). $ ( '# Маска') CSS ( "Дисплей", "блок"). } function out (event) {$ ('# mask'). fadeOut (1000); } </ script>
1

Перед выполнением fadeIn или fadeOut проверьте, если в настоящее время анимируется # #mask.

    function over(event)
    {
        if(!$("#mask").is(":animated")){
         $('#mask').fadeIn(1000);
         $('#mask').css("display","block");
        }
    }

    function out(event)
    {
       if(!$("#mask").is(":animated")){
         $('#mask').fadeOut(1000);
       }
    }

JS Fiddle: http://jsfiddle.net/nMN62/

  • 0
    спасибо, но это не сработало!
  • 0
    @Gasli Взгляните на это сейчас, потому что маска отображается над меню.
Показать ещё 3 комментария
0

Просто остановите текущую анимацию, используя .stop() для предотвращения этой проблемы. Код приведен ниже.

$("#mask").hover(function(){ 
    $(this).stop(true, true).fadeOut(100)
}, function(){
       $(this).stop(true, true).fadeIn(50)
});

Ещё вопросы

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