Size: a a a

2020 September 09

НС

Никита Сковорода... in pro.js
🇻🕷
Спасибо, но кажется не совсем подходит, я не могу использовать ничего выше es5 (
Плюс мне нужно анимировать внешний по отношению к бразеру объект(cordova plugin statusbar)
Эм. Animations API ортоганален версии жс.
источник

НС

Никита Сковорода... in pro.js
Какое реальное ограничение на движок?
источник

НС

Никита Сковорода... in pro.js
Если Animations API нет, бери цсс анимации и дёргай класс. Тебе хватит transition
источник

🇻

🇻🕷 in pro.js
chrome 39+
у меня есть window.StatusBar.backgroundColorByHexString(color); - его нужно вызывать каждый тик
источник

🇻

🇻🕷 in pro.js
window.StatusBar это верхняя панелька на мобиле, она не часть браузера, а cordova-плагин
источник

НС

Никита Сковорода... in pro.js
🇻🕷
chrome 39+
у меня есть window.StatusBar.backgroundColorByHexString(color); - его нужно вызывать каждый тик
Ну ок, есть requestAnimationFrame.
Но он не обязан быть равномерным.

В такой модели надо на каждый тик брать реальное время Date.now() и по функции сглаживания считать позицию анимации от этого времени.
Нельзя предполагать, что тики равномерно распределены или что их ровно столько, сколько ты хочешь.

А прекращать анимацию по достижению макс. времени.

Но это медленно, попробуй без жс на каждом тике.
источник

🇻

🇻🕷 in pro.js
Понял, не самая хорошая ситуация - что то чувствую я, что все равно не будет успевать
источник

🇻

🇻🕷 in pro.js
видимо придется снизить fps что бы setInterval выполнялся за более предсказуемое время:-/
источник

НС

Никита Сковорода... in pro.js
🇻🕷
Понял, не самая хорошая ситуация - что то чувствую я, что все равно не будет успевать
Не, так будет ровно и оно не может не успеть. Ты же на каждом шаге будешь время перепроверять
источник

V

Vlad in pro.js
🇻🕷
видимо придется снизить fps что бы setInterval выполнялся за более предсказуемое время:-/
setInterval вообще не надо юзать для анимации
источник

НС

Никита Сковорода... in pro.js
🇻🕷
видимо придется снизить fps что бы setInterval выполнялся за более предсказуемое время:-/
Так нельзя. это не будет работать
источник

🇻

🇻🕷 in pro.js
Спасибо, щас попробую считать реальное время
источник

НС

Никита Сковорода... in pro.js
Если там и реквестанимейшнфрейма нет, бери сетаймаут 16 (не сетинтервал) и ту же модель, что и выше я показал. Но это что-то совсем ужас.
источник

НС

Никита Сковорода... in pro.js
То, что гарантирует сеттаймаут х – это что до вызова пройдёт не меньше х миллисекунд.
источник

НС

Никита Сковорода... in pro.js
А сколько реально – это как получится и зависит много от чего
источник

В

Виктория in pro.js
🇻🕷
Подскажите, как правильно организовать анимацию на js?
Мне нужно анимировать переход цвета в течении ровно 2500мс со скоростью 60fps
Почему в данном случае console.log() выполняется то за 3000мс то за 2700?

Тыкинте мордой, как сделать предсказуемое время выполнения?

var time = 2500;
var interval = setInterval(function() {
   if(step < time) {
       var percentage = step / time;
       percentage = percentage > 1 ? 1 : percentage;

       var color = blendColors(fromColor, toColor, percentage);

       makeAnimation(color);

       step += 1000 / 60;
   } else {
       var e = new Date();
       console.log((e.getTime() - s.getTime()) / 1000);
       clearInterval(interval);
   }
}, 1000 / 60);
setInterval не гарантирует выполнение коллбэка четко через заданный промежуток времени. Так как setInterval работает асинхронно, это значит, что переданный в него коллбэк прежде чем выполниться, проходит через так называемую очередь макро-тасков, обработкой которой занимается event loop, механизм, отвечающий за событийный цикл в браузере. Проще говоря, если ты хочешь запустить некоторую функцию с интервалом, скажем, в 1 секунду, у тебя нет никаких гарантий на то, что эта функция будет выполняться с интервалом именно в 1 секунду. Если спустя одну секунду в очереди макротасков обнаружатся еще не обработанные задачи, то коллбэку интервала придется ждать, пока event loop не обработает их все и не дойдет до него. К тому же может возникнуть такая ситуация, когда медленный код стопорит основной поток. В этом случае коллбэки интервала начнут копиться в очереди и затем будут обработаны по одному на каждую итерацию событийного цикла, то есть временной промежуток между срабатыванием функций будет отличаться от указанного
источник

НС

Никита Сковорода... in pro.js
Виктория
setInterval не гарантирует выполнение коллбэка четко через заданный промежуток времени. Так как setInterval работает асинхронно, это значит, что переданный в него коллбэк прежде чем выполниться, проходит через так называемую очередь макро-тасков, обработкой которой занимается event loop, механизм, отвечающий за событийный цикл в браузере. Проще говоря, если ты хочешь запустить некоторую функцию с интервалом, скажем, в 1 секунду, у тебя нет никаких гарантий на то, что эта функция будет выполняться с интервалом именно в 1 секунду. Если спустя одну секунду в очереди макротасков обнаружатся еще не обработанные задачи, то коллбэку интервала придется ждать, пока event loop не обработает их все и не дойдет до него. К тому же может возникнуть такая ситуация, когда медленный код стопорит основной поток. В этом случае коллбэки интервала начнут копиться в очереди и затем будут обработаны по одному на каждую итерацию событийного цикла, то есть временной промежуток между срабатыванием функций будет отличаться от указанного
А ещё вкладка может стать неактивной и приоритет порезаться. Во имя энергосбережения в т.ч.
Посмотри, что при этом с таймаутами происходит :-)
источник

🇻

🇻🕷 in pro.js
Спасибо
источник

D

Danila in pro.js
Держи)
источник

D

Danila in pro.js
Переслано от Danila
источник