每次单击div“blue”时,它都会移动100px。它工作得很好,有一天我意识到它停止了工作。在尝试了很多东西之后,我发现问题出在最新版本的jQuery 1.10现在它只移动100px一次。这是因为它忽略了+ =。我找不到它是否被弃用?如果是这样,现在这样做的正确方法是什么?
你可以看到它在这里工作:http://jsfiddle.net/RB4eJ/1/
(这在jQuery 1.9.1中有效。但它不在1.10中)
$(function(){
$(".blue").click(function() {
$(".blue").animate({left: "+=100"}, 500)
});
})
答案 0 :(得分:8)
如果它是一个错误,我希望他们修复它,因为它很有用。但是现在你可以这样做:
$(".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);
});
<强> See working demo with jQuery 2.x 强>
<强> Performance test 强>
答案 1 :(得分:0)
使用+=
或-=
时,它看起来像动画中的错误。该错误似乎在行
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
答案 2 :(得分:0)
这确实是版本1.10.0中的错误,并在1.10.1
中修复http://blog.jquery.com/2013/05/30/jquery-1-10-1-and-2-0-2-released/