1

ソフトを作ってヘルプ音声ボタンを追加しています。OnClick で画像の変化(サウンドオン)を取り込み、サウンドを開始します。オーディオが終了すると画像が変わる(サウンドオフ)ように設定されたタイムアウトを追加しましたが、開始して停止するとタイムアウトが停止せず、もう一度押すと時間前に画像が変更されるという問題があります

主な問題は、ボタンを押してサウンドを開始し、もう一度押すと停止することです (サウンドが終了する 5 秒前に停止します) もう一度クリックして開始すると、オーディオが停止する 5 秒前に画像が変わります。

jQuery ではなく、Javascript コードが必要です。


2 画像 | soundon.png と soundoff.png
1 つのオーディオ | helpsound.mp3



コードは次のとおりです。

ジャバスクリプト

var clickNumber = 2;
function sound(soundfile) {

image = document.getElementById('snd')
switch (clickNumber) {
    case 1:                                                     
    document.getElementById('snd').src = "images/soundoff.png";
    document.getElementById("dummy").innerHTML= "";

    clickNumber = 2;
    return(false);

    case 2:
    document.getElementById('snd').src = "images/sound.png";
    document.getElementById("dummy").innerHTML="<embed src=\""+soundfile+"\" hidden=\"true\" autostart=\"true\" loop=\"false\"/>";

    setTimeout
        (
        function()
            {
        document.getElementById('snd').src = "images/soundoff.png";
            },10000                     
        );
    clickNumber = 1;
    break;
     }
}

HTML

<img src="images/soundoff.png" title="Turn On/Off Help Speech" onclick="sound('helpsound.mp3');" name="soundimg" id="snd">
4

1 に答える 1

1

clearTimeoutタイマーをキャンセルするために使用できます。

var clickNumber = 2,
    timeoutId = null;

function sound(soundfile) {
    image = document.getElementById('snd');
    switch (clickNumber) {
        case 1:                                                     
        image.src = "images/soundoff.png";
        document.getElementById("dummy").innerHTML= "";

        if(timeoutId !== null) {
            clearTimeout(timeoutId);
            timeoutId = null;
        }

        clickNumber = 2;
        return(false);

        case 2:
        image.src = "images/sound.png";
        document.getElementById("dummy").innerHTML='<embed src="' + soundfile + '" hidden="true" autostart="true" loop="false" />';

        timeoutId = setTimeout(
            function() {
                image.src = "images/soundoff.png";
            },10000
        );
        clickNumber = 1;
    }
}
于 2013-11-02T10:36:34.867 に答える