мышиный центр пузырится при наведении мыши несколько раз

0

как предотвратить барботирование или "из-под контроля", когда пользователь mouseenter (mouseenter) несколько раз. Когда пользователь наводит меня на использование slideDown и slideUp для мыши и задержки, я устанавливаю 250. Я могу только исправить это, если задержка установлена на 1 мс. Ниже мой сценарий:

$("#nav li").mouseenter(function (e) {
    e.stopPropagation();
    if (!is_opened) {
        var left = $(this).position().left;
        $(this).children('div').css('left', '-' + left + 'px');
        $(this).children('div').slideDown(delay, function () {
            // Animation complete.
            is_opened = true;
        });
    }

    return false;
});

$("#nav li").mouseleave(function () {

    if (is_opened) {
        $(this).children('div').slideUp(delay, function () {
            // Animation complete.
            is_opened = false;
        });
    } else {
        setTimeout(function () {
            if (is_opened) {
                $('#nav li:first-child').children('div').slideUp(delay, function () {
                    // Animation complete.
                    is_opened = false;
                });

            }
        }, 1000);

    }
    return false;
});

Вы можете проверить мою JsFiddle здесь

Воспроизводить проблему

  • Hover Catalog несколько раз и остановите наведение (но наведите курсор на каталог), вы увидите, что выпадающее меню будет скрыто, но на самом деле оно должно скользить вниз.
  • 0
    вам нужен флаг is_opened? jsfiddle.net/peteng/SD4Tp/5
  • 0
    или немного лучшая обработка остановки: jsfiddle.net/peteng/SD4Tp/10
Показать ещё 2 комментария
Теги:

1 ответ

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

Я думаю, что ваша проблема вызвана is_opened а затем анимация выполняется вдоль стороны, изменяя свойство left css

Если вы меняете свою кнопку мыши и оставляете js следующим

   $("#nav li").each(function() {
        //cache vars for better performance
        var li = $(this);
        var left = $(this).position().left;
        var divs = li.children('div');

        //change div left first so it only changes once
        divs.css('left', '-' + left + 'px');

        //do mouse enter and leave stuff
        li.mouseenter(function (e) {
            e.stopPropagation();
            divs.stop(true, true).slideDown(delay);
        });

        li.mouseleave(function () {
            divs.stop().slideUp(delay);
            return false;
        });
    });

он должен работать: пример

Ещё вопросы

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