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)
});
})
Ответы
Ответ 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
Ответ 3
Это действительно ошибка в версии 1.10.0 и исправлена в 1.10.1
http://blog.jquery.com/2013/05/30/jquery-1-10-1-and-2-0-2-released/
http://bugs.jquery.com/ticket/13939