Выпадающее меню JQuery с использованием слайд-шоу и слайдинга при наведении

Я создал очень простое раскрывающееся меню, используя jQuery slideup и slidedown для функций, но он очень нервный (я использую Firefox 3.6.8), если мышь перемещается к нему быстрее, или если мышь проводится в одном из подменю.

Я сделал рабочий пример по следующей ссылке:

http://jsfiddle.net/jUraw/19/

Без функции .stop(true, true) это еще хуже. Я также попытался добавить hover-намерение, но поскольку у меня есть слайд-шоу с включенным зависанием в одном и том же div, оно конфликтует с функциональностью слайд-шоу.

Есть ли что-то, что мне не хватает? Я слышал, что clearqueue может работать, или, может быть, таймаут, но не может понять, где их добавить.

Спасибо всем.

Ответы

Ответ 1

Вы можете создать небольшую задержку, скажем, 200 мс для завершения анимации, чтобы она не была нервной, но оставьте .stop(), чтобы она все еще не накапливалась, например:

$(function () {    
  $('#nav li').hover(function () {
     clearTimeout($.data(this, 'timer'));
     $('ul', this).stop(true, true).slideDown(200);
  }, function () {
    $.data(this, 'timer', setTimeout($.proxy(function() {
      $('ul', this).stop(true, true).slideUp(200);
    }, this), 200));
  });
});

Здесь вы можете попробовать здесь, этот подход использует $.data(), чтобы сохранить тайм-аут для каждого элемента, поэтому каждое меню обрабатывается независимо, если у вас много элементов меню, это должно дать хороший эффект.

Ответ 2

Это добавляет небольшую задержку при открытии - поэтому запуск над ней быстро не выскочит из меню.

$(function () {    
  $('#nav li').hover(function () {
    $('ul', this).stop(true, true).delay(200).slideDown(200);
  }, function () {
    $('ul', this).stop(true, true).slideUp(200);
  });
});