【发布时间】:2013-07-23 15:29:22
【问题描述】:
警告:家里有 jquery/javascript 新手。我使用tutorial here 制作了一个动画,其中图像在悬停时来回摆动。
但是,在第一次悬停事件之后,图像只会来回移动 1 次,而在第一次悬停事件时,它会来回摆动 5 次(由 swings 变量定义的次数)。我希望它在每个悬停事件中摆动相同的次数。
我尝试更改旋转、摆动和摆动计数变量,并尝试使摆锤功能与摆动功能相匹配,并更改摆锤摆动的 if/else 语句。没有任何效果 - 我做错了什么?代码如下:
<script type="text/javascript">
(function($) {
$(document).ready(function() {
var rotation = 5;
var initrotation = rotation;
var swingtime = 603;
var swings = 5;
var swingcount = 0;
var startatcentre = true;
if (startatcentre == true) {
initrotation = 0;
}
$('#pendulum-child').mouseenter(function() {
function init() {
$('#pendulum-parent').animate({rotate: initrotation}, 0, function () {
$('#pendulum-parent').css("display", "block");
rotation *= -1;
swingcount++;
pendulumswing();
});
}
function pendulumswing() {
$('#pendulum-parent').animate({rotate: rotation},swingtime, "swing", function(){
rotation *= -1;
if (swingcount >= swings) {
pendulumrest();
} else {
swingcount++;
pendulumswing();
}
});
}
function pendulumrest() {
$('#pendulum-parent').animate({rotate: 0},(swingtime/1.5), "swing");
}
init();
});
});
})(jQuery);
</script>
【问题讨论】:
-
在您的
init()函数中,您需要将变量重新初始化为它们在$(document).ready()上设置的值。 -
@AlexMorrise 谢谢。关于如何做到这一点的任何指导?我尝试将它们复制到函数中,但这会使动画跳动,所以这一定不是正确的方法。
-
我能想到的只是将初始化复制到
init()函数中,就在.animate()调用之前,正如你所说。但请确保您没有复制var部分(您不想重新声明变量)。 -
另外,您可以将您的函数声明放在
mouseenter绑定之外。每次您的鼠标经过钟摆时,您都在重新声明这些功能。
标签: jquery animation plugins hover mouseenter