пропонувати правки
JavaScript requestAnimationFrame() — плавна анімація на JavaScript
Метод requestAnimationFrame() викликає функцію перед наступним кадром — синхронно з частотою оновлення екрана.
автор: NagarD
правити
Загальний опис
Анімація через setInterval(fn, 16) завжди трохи смикається: браузер малює кадри за своїм розкладом, а таймер б'є за своїм, і вони не збігаються.
requestAnimationFrame вирішує це в корені — браузер сам каже, коли збирається малювати. Звідси плавність, яку інакше не отримати.
І ще дві переваги, за які його люблять: у прихованій вкладці він зупиняється (не палить батарею намарно) і підлаштовується під екран із частотою 120 Гц, а не тримається за жорсткі 60.
Анімація будується рекурсивно: усередині обробника плануємо наступний кадр.
автор: NagarD
правити
Порада
Обробник отримує час із моменту завантаження сторінки. Рахуй рух від нього, а не від номера кадру — інакше на екрані зі 120 Гц усе побіжить удвічі швидше.
автор: NagarD
правити
+ додати пораду чи нотатку
Переглядачі
Стаціонарні переглядачі
Мобільні переглядачі
Серверні переглядачі
Приклади
+ запропонувати свій приклад у пісочниці
Плавний рух, прив'язаний до часу, а не до кількості кадрів.
HTML
<div id="box" style="width:50px;height:50px;background:#0172ad"></div>
JS
const box = document.getElementById('box');
let start = null;
function step(timestamp) {
start ??= timestamp;
const elapsed = timestamp - start;
// 100px за секунду — незалежно від частоти екрана
const x = Math.min(elapsed / 10, 300);
box.style.transform = 'translateX(' + x + 'px)';
if (x < 300) {
requestAnimationFrame(step);
}
}
requestAnimationFrame(step);
автор: NagarD
Ваша версія — : після перевірки замінить чинну.
Нова порада чи нотатка — з'явиться на сторінці після перевірки.
Ваша версія секції « »: після перевірки замінить чинну.
Текст секції (markdown — передзаповнено чинним)
Як форматувати текст?
Пишемо
Виходить
**важливо***акцент*~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]]
Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org)
Посилання на чужий сайт.

Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру
Код усередині речення.
```css.card { display: grid }```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги.
Цитата на всю ширину абзацу.
Специфічність: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1][^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два||
Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішенняЗадайте контейнеру `display: grid`.||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок
Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.
Чому ця правка? (необов'язково, але дуже допомагає перевірці)
Ви гість — діють добові ліміти.
Увійдіть , щоб пропонувати без капчі.
Ваша версія опису « »: після перевірки замінить чинну.
Текст опису (markdown — передзаповнено чинним)
Як форматувати текст?
Пишемо
Виходить
**важливо***акцент*~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]]
Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org)
Посилання на чужий сайт.

Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру
Код усередині речення.
```css.card { display: grid }```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги.
Цитата на всю ширину абзацу.
Специфічність: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1][^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два||
Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішенняЗадайте контейнеру `display: grid`.||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок
Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.
Чому ця правка? (необов'язково, але дуже допомагає перевірці)
Ви гість — діють добові ліміти.
Увійдіть , щоб пропонувати без капчі.