0

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}で絶対的に配置されます

4

1 に答える 1

1

あなたのコードは本質的にこれを行っています:

  1. 1秒間実行されるタイムアウトタイマー
  2. 1秒間の実行の遅延
  3. 1秒間フェードランニング
  4. 繰り返す

->マウスオーバーイベントをトリガーし、(1)以外の時点でclearTimeoutを呼び出した場合、実行中のタイマーはクリアされません。

つまり、たとえば1.5秒後にこれを行うと、遅延はまだ実行されており、その後フェードしてから、setTimeoutを再度呼び出します。つまり、setTimeoutを呼び出す前にclearTimeoutを試行します。

おそらく.stop()を呼び出して、遅延キューとフェードキューを停止し、それらが完了したときにsetTimeoutが実行されないようにする必要があります。

于 2011-03-28T19:33:01.803 に答える