Способ jQuery ...
$audio.animate({volume: newVolume}, 1000);
Редактировать: где $ audio - это аудио-элемент в jQuery-оболочке, а newVolume - двойное число от 0 до 1.
Редактировать: элементЭффективная громкость мультимедиа - это громкость, интерпретируемая относительно диапазона от 0,0 до 1,0, 0,0 - бесшумность, 1,0 - самая громкая настройка, значения между которыми увеличиваются по громкости.Диапазон не должен быть линейным.http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#effective-media-volume
Редактировать: Люди публикуют ванильные реализации JavaScript, поэтому я опубликую ванильный TypeScript, сохраняющий анимацию свинга jQuery (просто удалите информацию о типе, если вы хотите запустить ее в JavaScript). Отказ от ответственности, это полностью не проверено :
export async function adjustVolume(
element: HTMLMediaElement,
newVolume: number,
{
duration = 1000,
easing = swing,
interval = 13,
}: {
duration?: number,
easing?: typeof swing,
interval?: number,
} = {},
) {
const originalVolume = element.volume;
const delta = newVolume - originalVolume;
if (!delta || !duration || !easing || !interval) {
element.volume = newVolume;
return Promise.resolve();
}
const ticks = Math.floor(duration / interval);
let tick = 1;
return new Promise<void>((resolve) => {
const timer = setInterval(() => {
element.volume = originalVolume + (
easing(tick / ticks) * delta
);
if (++tick === ticks) {
clearInterval(timer);
resolve();
}
}, interval);
});
}
export function swing(p: number) {
return 0.5 - Math.cos(p * Math.PI) / 2;
}