Проблема заключается в задержке между настройкой current
и ее использованием.Если навести курсор на другую вкладку в анимации 500 мс, обработчик будет вызван дважды (с различными значениями для current
) и покажет содержимое для двух вкладок.
Самый простой способ сделать это - превратить current
в глобальную переменную, чтобы на всех анимациях после завершения части 1 отображалась одна и та же вкладка (последняя, над которой вы работали).
$(function ()
{
var current;
$('#info-tabs .inner:first').fadeIn(200);
$('#info-tabs li:first').addClass('current-tab');
$('#info-tabs li').mouseover(function ()
{
current = $(this);
$("#info-tabs li").removeClass("current-tab");
current.addClass("current-tab");
$("#info-tabs .inner:visible").fadeOut(500, function () { $("#info-tabs .inner#" + current.attr("id")).fadeIn(200); });
});
});
Однако это не идеально, так как вы получаете нежелательную «глобальную» переменную и можете создать большую очередь анимации (я получил до 9 с неистовым движением мыши).
Я попытался обойти это, очистив очередь в начале обработчика наведения мыши (и установив его для завершения анимации).Это своего рода работает (конечный результат в порядке), но это дает некоторые неудачные вспышки контента в пути.Гектометр(Мне пришлось убрать fadeIn из fadeOut, чтобы я мог гарантировать, что он будет завершен к остановке.)
$(function ()
{
$('#info-tabs .inner:first').fadeIn(200);
$('#info-tabs li:first').addClass('current-tab');
$('#info-tabs li').mouseover(function ()
{
var current = $(this);
$("#info-tabs *").stop(true, true);
$("#info-tabs li").removeClass("current-tab");
current.addClass("current-tab");
$("#info-tabs .inner:visible").fadeOut(500);
$("#info-tabs .inner#" + current.attr("id")).delay(500).fadeIn(200);
});
});
(Также убрал каждый вызов, так как он не был действительно необходим.)