Я бы обернул setTimeout
внутри функции, а также опции.Что касается коэффициента, 0.01
будет безопасным значением для уменьшения без необходимости знать или корректировать начальное значение.
function fadeVolume(volume, callback)
{
var factor = 0.01,
speed = 50;
if (volume > factor)
{
setTimeout(function(){
fadeVolume((audio.volume -= factor), callback);
}, speed);
} else {
(typeof(callback) !== 'function') || callback();
}
}
fadeVolume(audio.volume, function(){
console.log('fade complete');
});
После завершения затухания будет запущен обратный вызов, который вы можете использоватьпроиграть следующую песню.