Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать плавный audio fadeIn и fadeout на JS? (https://javascript.ru/forum/misc/81566-kak-sdelat-plavnyjj-audio-fadein-i-fadeout-na-js.html)

CryNet 16.12.2020 14:27

Как сделать плавный audio fadeIn и fadeout на JS?
 
Здравствуйте. Нужно сделать fadeIn и fadeout музыки. На jQ есть отличный метод animate, который умеет это делать плавно и очень удобный:

https://codepen.io/CryNet/pen/VwKprLG

Есть что-то похожее на JS? Нужно добиться такого же функционала, но на JS (проект на React). Может вы видели портированный метод animate из jQ на числом JS? Аналогичный метод на JS не умеет в музыку

рони 16.12.2020 15:03

Цитата:

Сообщение от CryNet
animate из jQ на числом JS?

https://learn.javascript.ru/js-anima...tura-animatsii

CryNet 16.12.2020 16:22

Цитата:

Сообщение от рони (Сообщение 531786)

Спасибо. Пробую. Правда пока не очень получается :)

рони 16.12.2020 16:28

Цитата:

Сообщение от CryNet
Правда пока не очень получается

???

CryNet 16.12.2020 16:39

Цитата:

Сообщение от рони (Сообщение 531786)

Цитата:

Сообщение от рони (Сообщение 531792)
???

Ну, вроде получилось:

https://drive.google.com/drive/folde...sW?usp=sharing

рони 16.12.2020 16:57

CryNet,
нет смысла изменять плавность анимации в данном случае
timing: function(timeFraction) {
        return Math.pow(timeFraction, 2);
      },

можно просто
timing: function(timeFraction) {
        return timeFraction
      },

CryNet 16.12.2020 17:04

Цитата:

Сообщение от рони (Сообщение 531794)
CryNet,
нет смысла изменять плавность анимации в данном случае
timing: function(timeFraction) {
        return Math.pow(timeFraction, 2);
      },

можно просто
timing: function(timeFraction) {
        return timeFraction
      },

Спасибо. Правда я пока не сильно понимю как сделать fadeOut, то есть наоборот - уменьшать громкость

CryNet 16.12.2020 17:20

Цитата:

Сообщение от рони (Сообщение 531794)
CryNet,
нет смысла изменять плавность анимации в данном случае
timing: function(timeFraction) {
        return Math.pow(timeFraction, 2);
      },

можно просто
timing: function(timeFraction) {
        return timeFraction
      },

Разобрался:

function animate(options) {

var start = performance.now();

requestAnimationFrame(function animate(time) {

// timeFraction от 0 до 1
var timeFraction = (time - start) / options.duration;
if (timeFraction > 1) timeFraction = 1;



// текущее состояние анимации
var progress = 1 - options.timing(timeFraction)

console.log(progress)

options.draw(progress);

if (timeFraction < 1) {
requestAnimationFrame(animate);
}

});
}

рони 16.12.2020 17:30

Цитата:

Сообщение от CryNet
var progress = 1 - options.timing(timeFraction)

не надо так делать! есть функция draw в ней и меняйте
draw: function(progress) {
        console.log(progress);
        audio.volume =  1 - progress;
      }

CryNet 16.12.2020 17:32

Цитата:

Сообщение от рони (Сообщение 531799)
не надо так делать! есть функция draw в ней и меняйте
draw: function(progress) {
        console.log(progress);
        audio.volume =  1 - progress;
      }

Спасибо. Так даже лучше :)


Часовой пояс GMT +3, время: 19:30.