DedicatedWorkerGlobalScope: метод cancelAnimationFrame()
Базовая версия 2023
Новое
С марта 2023 года эта функция работает на последних устройствах и версиях браузеров. Возможно, эта функция не будет работать на более старых устройствах или браузерах.
Примечание: Эта функция доступна только в посвященных веб-воркерах.
Метод cancelAnimationFrame() интерфейса DedicatedWorkerGlobalScope отменяет запрос кадра анимации, ранее запланированный с помощью вызова requestAnimationFrame().
Для вызова метода cancelAnimationFrame() текущий рабочий процесс должен иметь связанного владельца window. Это означает, что текущий рабочий процесс должен быть создан window или посвящённым рабочим процессом, который также имеет связанного владельца window.
Синтаксис
cancelAnimationFrame(handle)
Параметры
handle-
Значение идентификатора, возвращённое вызовом
requestAnimationFrame(); вызов должен быть выполнен в том же рабочем процессе.
Возвращаемое значение
None (undefined).
Исключения
-
NotSupportedErrorDOMException -
Выбрасывается, если метод не поддерживается текущим рабочим процессом.
Примеры
В основном потоке мы начинаем с передачи управления элементом <canvas> в OffscreenCanvas, используя HTMLCanvasElement.transferControlToOffscreen() и отправляем сообщение в "start" для выполнения работы с offscreen canvas:
const offscreenCanvas = document
.querySelector("canvas")
.transferControlToOffscreen();
worker.postMessage(
{
type: "start",
canvas: offscreenCanvas,
},
[offscreenCanvas],
);
При получении сообщения "start", рабочий процесс начинает анимацию, перемещая прямоугольник слева направо. При получении сообщения "stop", он остановит анимацию.
let ctx;
let pos = 0;
function draw(dt) {
ctx.clearRect(0, 0, 100, 100);
ctx.fillRect(pos, 0, 10, 10);
pos += 10 * dt;
self.requestAnimationFrame(draw);
}
self.addEventListener("message", (e) => {
if (e.data.type === "start") {
const transferredCanvas = e.data.canvas;
ctx = transferredCanvas.getContext("2d");
self.requestAnimationFrame(draw);
}
if (e.data.type === "stop") {
self.cancelAnimationFrame(handle);
}
});
Наконец, если необходимо, основной поток может отправить сообщение "stop" рабочему процессу, чтобы остановить анимацию:
worker.postMessage({
type: "stop",
});
Спецификации
| Спецификация |
|---|
| HTML # animationframeprovider-cancelanimationframe |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
cancelAnimationFrame |
69 | 79 | 99 | 56 | 16.4 | 69 | 99 | 48 | 16.4 | 10.0 | 67 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/DedicatedWorkerGlobalScope/cancelAnimationFrame