Проблема совместимости с jQuery

Я пытаюсь использовать небольшой плагин для анимации меню, который я нашел на http://www.gmarwaha.com/blog/2007/08/23/lavalamp-for-jquery-lovers/

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

(function ($) {
    $.fn.lavaLamp = function (o) {
        o = $.extend({
            fx: "linear",
            speed: 500,
            click: function () {}
        }, o || {});
        return this.each(function () {
            var b = $(this),
                noop = function () {},
                $back = $('<li class="back"></li>').appendTo(b),
                $li = $("li", this),
                curr = $("li.current", this)[0] || $($li[0]).addClass("current")[0];
            $li.not(".back").mouseover(function () {
                move(this)
            }, noop);
            $(this).hover(noop, function () {
                move(curr)
            });
            setCurr(curr);

            function setCurr(a) {
                $back.css({
                    "left": a.offsetLeft + "px",
                    "width": a.offsetWidth + "px"
                });
                curr = a
            };

            function move(a) {
                $back.each(function () {
                    $.dequeue(this, "fx")
                }).animate({
                    width: a.offsetWidth,
                    left: a.offsetLeft
                }, o.speed, o.fx)
            }
        })
    }
})(jQuery);

3 ответа

Анимация работает для меня в IE8 и FF, используя демонстрацию, включенную в этот zip-файл, с использованием jQuery 1.7.1. Единственное, что мне пришлось изменить в файле примера, чтобы ссылки работали, это закомментировать возвращаемое значение false в событии click следующим образом:

$(function() {
    $("#1, #2, #3").lavaLamp({
        fx: "backout",
        speed: 700,
        click: function(event, menuItem) {
            //return false;
        }
    });
});

так как это мешало действительным ссылкам работать. В этом твоя проблема? Если нет, то, возможно, в вашем коде есть какая-то другая ошибка, которая, кажется, работает.

Проблема со строкой:

$li.not(".back").mouseover(function(){move(this)}, noop);

Выньте второй аргумент из обработчика, оставив:

$li.not(".back").mouseover(function(){move(this)});

Причина, по которой вы хотите использовать указатель мыши вместо наведения, заключается в том, что у вас есть элементы подменю. Использование hover имеет ошибку, из-за которой элемент подчеркивания сбрасывается обратно к первому элементу при наведении курсора на элементы подменю.

Вы всегда можете просто загрузить обе версии jquery. Используя noConflict, вы можете загрузить 1.5 для плагина, но используйте 1.7 для собственных нужд.

Другие вопросы по тегам