Подтвердить что ты не робот

JQuery animate + = и последняя версия

Каждый раз, когда я нажимаю div, "синий", он перемещается на 100 пикселей. Он работал хорошо, и однажды я понял, что он перестает работать. Пробовав много вещей, я обнаружил, что проблема связана с последней версией jQuery 1.10. Теперь он просто перемещает 100px один раз. Он игнорирует + =. Я не мог найти, если он устарел? Если да, то каков правильный способ сделать это сейчас?

Вы могли видеть, что он работает здесь: http://jsfiddle.net/RB4eJ/1/
(Это работает в jQuery 1.9.1, но это не в 1.10)

$(function(){
    $(".blue").click(function() {
        $(".blue").animate({left: "+=100"}, 500)    
    });
})
4b9b3361

Ответ 1

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

$(".blue").click(function() {
    var new_left = +$(this).css("left").replace("px", "") + 100;
    $(".blue").animate({left: new_left + "px"}, 500)    
});

Или, как предложил @adeneo:

$(".blue").click(function() {
    $(this).animate({left: $(this).position().left+100}, 500);  
});

См. рабочую демонстрацию с jQuery 2.x

Тест производительности

Ответ 2

Похоже на ошибку в анимации при использовании += или -=. Кажется, что ошибка на линии

https://github.com/jquery/jquery/blob/master/src/effects.js#L48-L50

Ниже приведена ссылка на код,

// If a +=/-= token was provided, we're doing a relative animation
tween.end = parts[ 1 ] ?
    //v--- bug
    start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :  
   +parts[ 2 ];

изменение вышеуказанного должно исправить ошибку,

// If a +=/-= token was provided, we're doing a relative animation
tween.end = parts[ 1 ] ?
    //v-- changed to tween.start
    tween.start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :  
   +parts[ 2 ];

Исправлено тестирование скриптом: http://jsfiddle.net/xEhuR/ [контрольная строка 8878]

Примечание.. Ну, вышесказанное не позволяет решить проблему. Вы должны придерживаться обходного пути или ждать исправления от jQuery.

Добавлено в билет http://bugs.jquery.com/ticket/13939?comment:10#comment:10