clearTimeout не работает - PullRequest
       25

clearTimeout не работает

0 голосов
/ 28 марта 2011

Я пытаюсь сделать вращатель изображения с помощью 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 Ответ

1 голос
/ 28 марта 2011

Ваш код по сути делает это:

  1. Таймер таймаута работает в течение одной секунды
  2. задержка на одну секунду
  3. исчезает в течение одной секунды
  4. повтор

-> если вы инициируете событие наведения мыши и, следовательно, вызываете clearTimeout в любой точке, кроме (1), вы не очищаете ни один из запущенных таймеров.

Другими словами, если вы сделаете это после, скажем, 1,5 секунды, задержка все еще работает, затем затухание, и затем вы снова вызываете setTimeout - поэтому вы пытаетесь очиститьTimeout перед вызовом setTimeout .

Вам, вероятно, следует вызвать .stop (), чтобы остановить задержку и очередь исчезновения и предотвратить запуск setTimeout после их завершения.

...