3

私のプログラムでは、スタート画面にバックグラウンド ミュージックがあります。この機能は、スタート ボタンがクリックされるとバック グラウンド サウンドをフェード アウトすることです。

$(bgMusic).on('timeupdate', function () {
    var vol = 1,
        interval = 250;
    if (bgMusic.volume == 1) {
        var intervalID = setInterval(function () {
            if (vol > 0) {
                vol -= 0.05;
                bgMusic.volume = vol.toFixed(2);
            } else {
                clearInterval(intervalID);
            }
        }, interval);
    }
});

スタート画面に戻る再起動ボタンを追加したので、音楽を同じ速度でフェードインする必要があります。いくつか試してみましたが、うまくいきません。誰か助けてもらえますか?

これらの行に沿って何かが必要です:

$(bgMusic).off('timeupdate', function () {
    var vol = 0,
        interval = 250;
    if (bgMusic.volume == 0) {
        var intervalID = setInterval(function () {
            if (vol < 0) {
                vol += 0.05;
                bgMusic.volume = vol.toFixed(2);
            } else {
                clearInterval(intervalID);
            }
        }, interval);
    }
});
4

1 に答える 1

0

これを行うにはもっと良い方法があるかもしれませんが、慣れるためにボリューム フェーダーを書きました<audio>

で有効にして<audio>からenableFader(yourAudioNode)、呼び出しyourAudioNode.fadeOut()をフェードアウトするか、呼び出しをフェードインしますyourAudioNode.fadeIn()
これはtimeupdateのリッスンに基づいているため、より遅い速度を指定しない限り、ここで説明されている頻度で音量が変更されます。

function enableFader(node, per_step, min_interval) {
    'use strict';
    var fadeOut, fadeIn;
    node.fadeSettings = {
        dir : 0,
        step : per_step || 0.05,
        interval : min_interval || 0.150,
        lastTime : -Infinity
    };
    fadeOut = function fadeOut() {
        var vol = this.volume,
            settings = this.fadeSettings,
            ctime = this.currentTime,
            dtime = Math.abs(ctime - settings.lastTime);
        if (settings.dir === -1 && dtime >= settings.interval && vol > 0) {
            settings.lastTime = ctime;
            this.volume = (vol - settings.step).toFixed(2);
        } else if (vol <= 0 || settings.dir !== -1) {
            this.removeEventListener('timeupdate', fadeOut);
            settings.dir = 0;
        }
    };
    fadeIn = function fadeIn() {
        var vol = this.volume,
            settings = this.fadeSettings,
            ctime = this.currentTime,
            dtime = Math.abs(ctime - settings.lastTime);
        if (settings.dir === 1 && dtime >= settings.interval && vol < 1) {
            settings.lastTime = ctime;
            this.volume = (vol + settings.step).toFixed(2);
        } else if (vol >= 1 || settings.dir !== 1) {
            this.removeEventListener('timeupdate', fadeIn);
            settings.dir = 0;
        }
    };
    node.fadeOut = function () {
        this.fadeSettings.dir = -1;
        this.addEventListener('timeupdate', fadeOut, false);
    };
    node.fadeIn = function () {
        this.fadeSettings.dir = 1;
        this.addEventListener('timeupdate', fadeIn, false);
    };
}

Google Chrome の開発コンソールを使用して、このページでテストしました。

var a = document.getElementById('song');
enableFader(a);
a.fadeOut();
// a.fadeIn();
于 2012-11-27T19:03:27.557 に答える