clearTimeout不工作

时间:2011-03-28 17:48:40

标签: javascript jquery image settimeout rotator

我正在尝试使用Jquery制作图像旋转器,但是当我将鼠标放在图像上时,我的旋转器不会停止,因此我猜测clearTimeout出了问题。
这是我的代码:

$(document).ready(function () {
    var o = 0
    var t = null;
    stop = false;
    $("img:gt(0)").hide();
    broj = ($("img").size());

    function promena() {
        o++;
        if (o == broj) {
            o = 0;
            $("img:lt(3)").hide(function () {
                $("img").eq(3).delay(1000).fadeOut(1000);
            });
        }
        $("img").eq(o).delay(1000).fadeIn(1000, function () {
            t = setTimeout(promena, 1000);
        });
    };

    t = setTimeout(promena, 1000);
    $("div img").mouseover(function () {
        clearTimeout(t);
    });
});

这是HTML:

<html>
<head>
<title>M</title>
</head>
<body>
 <div>
 <img src="images/1.jpg"    />
 <img src="images/2.jpg"    />
 <img src="images/3.jpg"    />
 <img src="images/4.jpg"    />
 </div>
</body>
</html>

如果它意味着什么,我的所有图像都绝对定位于img {position:absolute}

1 个答案:

答案 0 :(得分:1)

您的代码基本上是这样做的:

  1. 超时计时器运行一秒
  2. 延迟运行一秒
  3. 淡出一秒钟
  4. 重复
  5. - &GT;如果你触发mouseover事件,并因此在(1)以外的任何点调用clearTimeout,你就不会清除任何正在运行的计时器。

    换句话说,如果你之后执行此操作,比如1.5秒,延迟仍然在运行,然后是淡入淡出,然后再次调用setTimeout - 所以你在调用之前尝试clearTimeout的setTimeout。

    您应该调用.stop()来停止延迟和淡入淡出队列,并防止setTimeout在完成时运行。

相关问题