Простая анимация цвета
Очень простая анимация цвета, созданная с помощью WebGL, которая выполняется путём очистки буфера рисования случайным цветом каждую секунду.
Анимация цвета с очисткой
Этот пример демонстрирует анимацию цвета с помощью WebGL, а также взаимодействие с пользователем. Пользователь может запускать, останавливать и перезапускать анимацию, нажав на кнопку.
На этот раз вызовы функций WebGL помещены в обработчик события таймера. Обработчик события клика, в свою очередь, позволяет пользователю запускать и останавливать анимацию. Таймер и функция обработчика таймера определяют цикл анимации — набор команд рисования, которые выполняются с регулярной периодичностью (обычно каждый кадр; в данном случае — один раз в секунду).
<p>A simple WebGL program that shows color animation.</p> <p>You can click the button below to toggle the color animation on or off.</p> <canvas id="canvas-view"> Your browser does not seem to support HTML canvas. </canvas> <button id="animation-onoff"> Press here to <strong>[verb goes here]</strong> the animation </button>
body {
text-align: center;
}
canvas {
display: block;
width: 280px;
height: 210px;
margin: auto;
padding: 0;
border: none;
background-color: black;
}
button {
display: inline-block;
font-size: inherit;
margin: auto;
padding: 0.6em;
}
window.addEventListener(
"load",
function setupAnimation(evt) {
"use strict";
window.removeEventListener(evt.type, setupAnimation, false);
// A variable to hold a timer that drives the animation.
let timer;
// Click event handlers.
const button = document.querySelector("#animation-onoff");
const verb = document.querySelector("strong");
function startAnimation(evt) {
button.removeEventListener(evt.type, startAnimation, false);
button.addEventListener("click", stopAnimation, false);
verb.textContent = "stop";
// Setup animation loop by redrawing every second.
timer = setInterval(drawAnimation, 1000);
// Give immediate feedback to user after clicking, by
// drawing one animation frame.
drawAnimation();
}
function stopAnimation(evt) {
button.removeEventListener(evt.type, stopAnimation, false);
button.addEventListener("click", startAnimation, false);
verb.textContent = "start";
// Stop animation by clearing the timer.
clearInterval(timer);
}
// Call stopAnimation() once to set up the initial event
// handlers for canvas and button.
stopAnimation({ type: "click" });
let gl;
function drawAnimation() {
if (!gl) {
const canvas = document.getElementById("canvas-view");
gl =
canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
if (!gl) {
clearInterval(timer);
alert(
"Failed to get WebGL context.\n" +
"Your browser or device may not support WebGL.",
);
return;
}
gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
}
// Get a random color value using a helper function.
const color = getRandomColor();
// Set the WebGLRenderingContext clear color to the
// random color.
gl.clearColor(color[0], color[1], color[2], 1.0);
// Clear the context with the newly set color.
gl.clear(gl.COLOR_BUFFER_BIT);
}
// Random color helper function.
function getRandomColor() {
return [Math.random(), Math.random(), Math.random()];
}
},
false,
);
Исходный код этого примера также доступен на GitHub.
© 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/WebGL_API/By_example/Simple_color_animation