Проблема совместимости jQuery - PullRequest
2 голосов
/ 23 января 2012

Я пытаюсь использовать небольшой плагин для анимации меню, который я нашел в 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 ]

1 голос
/ 23 января 2012

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

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

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

0 голосов
/ 11 февраля 2012

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

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

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

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

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

0 голосов
/ 23 января 2012

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

...