Путь 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#efficient-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,
} = {},
): Promise<void> {
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(resolve => {
const timer = setInterval(() => {
element.volume = originalVolume + (
easing(tick / ticks) * delta
);
if (++tick === ticks + 1) {
clearInterval(timer);
resolve();
}
}, interval);
});
}
export function swing(p: number) {
return 0.5 - Math.cos(p * Math.PI) / 2;
}
person
jedmao
schedule
31.10.2012