我刚刚在jQuery中创建了一个简单的,连续的bounce effect,但我觉得代码并非全部优化,我希望改进它。
var $square = $("#square");
bounce();
function bounce() {
$square.animate({
top: "+=10"
}, 300, function() {
$square.animate({
top: "-=10"
}, 300, function() {
bounce();
})
});
}
$square.hover(function() {
jQuery.fx.off = true;
}, function() {
jQuery.fx.off = false;
});
我所做的一切基本上是创建了一个动画,它将+10添加到元素的顶部坐标,作为回调函数,我从顶部坐标减去10 ..
这会产生一种(几乎光滑的)反弹效果,但我觉得它可以改进。
此外,我想停止mouseenter
上的动画,并继续mouseleave
。
stop(true, true)
无法正常工作,dequeue()
也没有用,所以我使用jQuery.fx.off = true
(愚蠢,没有?)来取消所有动画效果。
我很感激有关如何优化这些内容的任何反馈。
这是jsFiddle。
编辑:我刚刚意识到,在禁用和重新启用效果时,jQuery已经开始抛出too much recursion
错误。
提前致谢,
马尔科
答案 0 :(得分:7)
请尝试以下代码演示: http://jsfiddle.net/LMXPX/
$(function() {
var $square = $("#square"),flag = -1;
var timer = bounce = null;
(bounce = function () {
timer = setInterval(function() {
flag = ~flag + 1;
$square.animate({
top: "+="+(flag*10)
}, 300)
},300);
})();
$square.hover(function() {
clearInterval(timer);
}, function() {
bounce();
});
});
编辑:我猜你的代码中有多个CallBack函数是递归过多的原因
答案 1 :(得分:0)
没有太大改进,但这是我的尝试:
var $square = $("#square");
(function loop () {
$square
.animate({ top: "+=10" }, 300)
.animate({ top: "-=10" }, 300, loop );
})();
$square.hover(function() {
$.fx.off = !$.fx.off;
});