【发布时间】:2011-04-06 11:14:09
【问题描述】:
我刚刚在 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 错误。
提前致谢,
马尔科
【问题讨论】:
-
我猜,通过在自身内部调用bounce() 作为回调,会生成一个很大的堆栈跟踪,从而导致太多的递归错误。
-
递归太多的问题是递归太多了。
-
是的@Neil - 为了理解递归,你必须首先理解递归。
标签: jquery animation effect continuous