3

配列に事前設定された一連の値に基づいて、要素の不透明度を変更しようとしています。そのアクションは、ユーザーがボタンをクリックし、システムが 1 秒間待機した後に開始する必要があります。

これが私が得たものです:

<script>
$(function() {
$("#Listening").click(function() {

    setTimeout(triggerListening, 1000);
    function triggerListening()
    {
        document.getElementById("listening").className = "listeningIn";
    }

    setTimeout(triggerUserTalking, 2000);
    function triggerUserTalking()
    {

        var audioSim = [3, 2, 7, 15, 15, 16, 15, 7, 7, 3, 8, 8, 17, 17, 20, 20, 21, 21, 17, 17, 13, 13, 12, 12, 13, 13, 16, 16, 18, 18, 17, 17, 16, 16, 14, 10, 11, 11, 15, 15, 16, 16, 15, 15, 14, 14, 13, 13, 13, 13, 15, 15, 23, 44, 55, 55, 56, 55, 44, 44, 33, 29, 31, 31, 42, 50, 60, 63, 60, 54, 39, 39, 30, 28, 30, 30, 33, 33, 36, 39, 38, 38, 33, 16, 6, 6, 5, 7, 18, 18, 28, 31, 28, 28, 26, 26, 23, 22, 23, 23, 25, 28, 28, 28, 27, 27, 28, 28, 28, 28, 28, 28, 27, 27, 28, 28, 35, 35, 43, 43, 49, 54, 56, 55, 43, 36, 26, 28, 31, 52, 65, 70, 68, 68, 51, 45, 41, 41, 38, 40, 49, 49, 57, 58, 58, 31, 42, 42, 46, 51, 55, 55, 54, 42, 33, 31, 37, 37, 45, 46, 42, 42, 37, 38, 38, 41, 41, 44, 44, 46, 48, 47, 47, 43, 44, 44, 47, 47, 49, 49, 48, 45, 44, 44, 44, 44, 45, 45, 44, 44, 43, 39, 36, 34, 35, 59, 59, 85, 93, 98, 98, 100, 95, 67, 67, 43, 36, 34, 34, 39, 51, 62, 62, 68, 76, 75, 75, 50, 36, 27, 20, 18, 36, 57, 57, 52, 48, 43, 44, 49, 50, 50, 49];

        var i = 0;

        window.setInterval('step()', 20)

        function step() {
            var element = document.getElementById("listening");
            element.style.opacity = "0." + audioSim[i];
            i++;
            if (i == audioSim.length) i = triggerStopTalking;
        }

        function triggerStopTalking()
        {
            document.getElementById("listening").className = "listeningOut";
        }

    }                   

});
});
</script>

これは、不透明部分の変化を期待して正常に機能します...

ユーザーが Listening をクリックすると、1 秒後に「listeningIn」クラスを切り替えてリスニング オブジェクトが画面に表示されます。さらに 1 秒後に、その要素は「audioSim」内の値に基づいて不透明度を何度も変更する必要がありますが、そうではありません。だ...

別のhtmlファイルでsetIntervalコードをテストしましたが、正常に動作します...だから、setTimeout関数内にsetIntervalを入れることはできないと思いますか? ヘルプ?

4

3 に答える 3

3

に文字列を渡していますsetInverval
そうしないでください。

setIntervalevalあなたの文字列をグローバルスコープに入れています。step()ローカル変数です。したがって、何も見つかりません。

代わりに、関数自体を渡す必要があります。

setInterval(step);
于 2012-11-27T22:38:24.257 に答える
3

それ以外の

window.setInterval('step()', 20);

試す

window.setInterval(step, 20);

テキスト バージョンは、step存在しない可能性があるグローバル スコープで評価されると思います。

于 2012-11-27T22:38:33.240 に答える
3

行で:

> window.setInterval('step()', 20)

setInterval はグローバル コンテキストで実行されますが、アクセスできないstep別のコンテキスト内で宣言されています。window次のように変更します。

setInterval(step, 20)

代わりに関数への参照を渡すようにします。

于 2012-11-27T22:39:51.337 に答える