framework - Документация
Полное руководство по использованию декларативного фреймворка для создания интерактивного контента на HTML5 Canvas.
Что такое framework?
framework — это минималистичный декларативный фреймворк для создания интерактивного контента на HTML5 Canvas с помощью простого и интуитивного синтаксиса.
- Простой синтаксис для рисования фигур и текста
- Поддержка переменных и выражений
- Интерактивность (мышь, клавиатура)
- Анимации и таймеры
- Загрузка изображений и звука
- Модульная система
- Живое редактирование через API
Установка
Добавьте скрипт framework в ваш HTML файл:
<!-- Стандартная версия с обработкой ошибок --> <script src="https://framework.itrypro.ru/api/framework@2.7/framework.js"></script> <!-- ИЛИ легкая версия для максимальной скорости --> <script src="https://framework.itrypro.ru/api/framework@2.5/s-framework.js"></script>
Доступные версии
| Версия | Тип | URL |
|---|---|---|
| 1.0 | Стандарт | framework.itrypro.ru/api/framework@1.0/framework.js |
| 1.5 | Стандарт | framework.itrypro.ru/api/framework@1.5/framework.js |
| 2.1 | Стандарт | framework.itrypro.ru/api/framework@2.1/framework.js |
| 2.5 | Стандарт (рекомендуется) | framework.itrypro.ru/api/framework@2.5/framework.js |
| 2.7 | Стандарт (рекомендуется) | framework.itrypro.ru/api/framework@2.7/framework.js |
| 2.1 s | Легкая версия | framework.itrypro.ru/api/framework@2.1/s-framework.js |
| 2.5 s | Легкая версия | framework.itrypro.ru/api/framework@2.5/s-framework.js |
Быстрый старт
Создайте ваш первый canvas за 2 минуты:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>My Canvas</title>
<style>
body { margin: 0; background: #0f172a; }
</style>
</head>
<body>
<framework>
config.title "Мой первый холст"
draw.rect 0 0 600 600 #1e293b
draw.circle 300 300 100 #00d9ff
draw.text "Hello Framework!" 300 300 #ffffff 36px sans-serif
</framework>
<script src="https://framework.itrypro.ru/api/framework@2.7/framework.js"></script>
</body>
</html>
Синтаксис
framework использует простой декларативный синтаксис, похожий на конфигурационные файлы.
Базовая структура
Каждая команда находится на отдельной строке и состоит из имени команды и параметров:
команда параметр1 параметр2 параметр3
Типы значений
| Тип | Пример | Описание |
|---|---|---|
| Число | 300 |
Целые числа и числа с плавающей точкой |
| Цвет (hex) | #00d9ff |
Hex цвет или сокращение rgb |
| Строка | "Hello World" |
Текст в двойных кавычках |
| Размер | 32px |
Размер с единицей измерения |
| Переменная | myVar |
Ранее определенная переменная |
Переменные
Определяйте переменные для переиспользования значений:
// Определение переменных color = #00d9ff size = 32px x = 300 y = 300 radius = 50 // Использование переменных draw.circle x y radius color draw.text "Text" x y color size sans-serif
Выражения
Вы можете использовать математические выражения:
// Арифметические операции x = 150 + 150 y = 600 - 300 size = 16 * 2 // Использование встроенных функций Math angle = Math.sin(t) * 100 radius = Math.cos(time / 1000) * 50
Специальные переменные
Framework предоставляет специальные переменные в блоках анимации:
time— прошедшее время в миллисекундахt— время в секундах (t = time / 1000)mouseX— координата мыши по XmouseY— координата мыши по Y
Комментарии
Используйте // для добавления комментариев:
// Это комментарий draw.rect 0 0 600 600 #1e293b // Фоновый прямоугольник // draw.text "Закомментированная строка" 300 300 #fff 32px
Команды рисования
Рисует прямоугольник на канвасе.
draw.rect x y width height [color]
Параметры:
x— координата по горизонтали (пиксели)y— координата по вертикали (пиксели)width— ширина прямоугольникаheight— высота прямоугольникаcolor— цвет (опционально, по умолчанию #1e293b)
Пример:
draw.rect 50 50 500 500 #00d9ff draw.rect 100 100 400 400 // Цвет по умолчанию
Рисует круг на канвасе.
draw.circle x y radius [color]
Параметры:
x— координата центра по Xy— координата центра по Yradius— радиус кругаcolor— цвет (опционально, по умолчанию #64748b)
Пример:
draw.circle 300 300 100 #00d9ff draw.circle 300 300 50 #6633ff draw.circle 200 200 30 #ff6b6b
Рисует текст на канвасе.
draw.text "текст" x y color [size] [font]
Параметры:
текст— текст для рисования (в двойных кавычках)x— координата по X (центр текста)y— координата по Y (центр текста)color— цвет текстаsize— размер текста (опционально, по умолчанию 40px)font— название шрифта (опционально, по умолчанию sans-serif)
Пример:
draw.text "Hello" 300 300 #ffffff 48px sans-serif draw.text "Framework" 300 400 #00d9ff 32px draw.text "Default size" 300 500 #94a3b8
Работа с изображениями
Загружает изображение для использования.
image.add id url
Параметры:
id— идентификатор изображения для последующего использованияurl— URL изображения
Пример:
image.add myimg https://example.com/image.png image.add logo https://cdn.example.com/logo.svg
Рисует загруженное изображение.
image.draw id x y [width] [height]
Параметры:
id— идентификатор загруженного изображенияx— координата по X (верхний левый угол)y— координата по Y (верхний левый угол)width— ширина (опционально, оригинальная ширина по умолчанию)height— высота (опционально, оригинальная высота по умолчанию)
Пример:
image.add pic https://example.com/pic.png image.draw pic 0 0 600 600 image.draw pic 100 100 400 400
Работа со звуком
Загружает звуковой файл.
sound.load id url
Параметры:
id— идентификатор звукаurl— URL файла (mp3, wav, ogg)
Воспроизводит загруженный звук.
sound.play id
Пример:
sound.load click https://example.com/click.mp3 sound.play click // Воспроизвести звук
Команды управления
Устанавливает заголовок холста.
config.title "название"
Пример:
config.title "Мой интерактивный холст"
Условное выполнение команд.
if condition
команда1
else
команда2
Поддерживаемые операторы:
==— равно!=— не равно<— меньше>— больше<=— меньше или равно>=— больше или равно
Пример:
x = 300 if x == 300 draw.circle x 300 50 #00d9ff else draw.circle x 300 50 #6633ff
Выбирает слой для рисования.
layer background | scene | ui
Слои:
background— фоновый слой (снизу)scene— основной слой (по умолчанию)ui— слой интерфейса (сверху)
Импортирует внешний модуль.
import module.frame.work
Анимация
Блок кода, который выполняется каждый кадр анимации.
animate.start
команды рисования
animate.end
Описание:
Весь код между animate.start и animate.end будет выполняться ~60 раз в секунду. Холст очищается перед каждым кадром.
Пример простой анимации:
config.title "Анимированный круг" animate.start draw.rect 0 0 600 600 #1e293b // Используем специальную переменную 't' (время в секундах) x = 300 + Math.sin(t) * 100 y = 300 + Math.cos(t) * 100 draw.circle x y 50 #00d9ff animate.end
Пример с пользовательским вводом:
animate.start draw.rect 0 0 600 600 #0f172a draw.circle mouseX mouseY 50 #00d9ff draw.text "X:" mouseX 30 #ffffff 16px animate.end
Ввод пользователя
В блоках анимации доступны переменные для отслеживания пользовательского ввода:
Мышь
mouseX— координата мыши по X (0-600)mouseY— координата мыши по Y (0-600)
Клавиатура
Используйте объект input.keys для отслеживания нажатий клавиш:
animate.start
draw.rect 0 0 600 600 #1e293b
if input.keys["ArrowUp"]
y = y - 10
if input.keys["ArrowDown"]
y = y + 10
draw.circle 300 y 50 #00d9ff
animate.end
Клики мыши
Массив input.clicks содержит координаты последних кликов:
animate.start
draw.rect 0 0 600 600 #1e293b
if input.clicks.length > 0
lastClick = input.clicks[input.clicks.length - 1]
draw.circle lastClick.x lastClick.y 30 #ff6b6b
animate.end
Слои
Используйте слои для организации контента по глубине:
// Фоновый слой layer background draw.rect 0 0 600 600 #0f172a // Основной слой (по умолчанию) layer scene draw.circle 300 300 100 #00d9ff // Слой интерфейса (сверху) layer ui draw.text "Score: 100" 50 50 #ffffff 24px
Таймеры
Выполняет команду через определенное время.
after milliseconds do команда
Пример:
after 2000 do draw.text "2 секунды прошло" 300 300 #00d9ff 32px
Выполняет команду повторно через интервал.
every milliseconds do команда
Пример:
every 1000 do sound.play click
Модульная система
Используйте расширение .frame.work для создания переиспользуемых модулей:
Создание модуля (utility.frame.work)
// Рисует сетку grid_size = 50 grid_color = #333333 x = 0 while x < 600 draw.rect x 0 1 600 grid_color x = x + grid_size
Использование модуля
import utility.frame.work draw.rect 0 0 600 600 #1e293b draw.circle 300 300 100 #00d9ff
JavaScript API
Управляйте framework кодом через JavaScript API:
Авторизуйтесь для редактирования кода.
framework.auth('mypassword');
Добавляет строку кода.
framework.addLine('draw.rect 100 100 200 200 #00d9ff');
Изменяет строку кода (1-индексированная).
framework.setLine(1, 'draw.circle 300 300 100 #ff6b6b');
Запускает текущий код.
framework.run();
Включает/отключает логирование в консоль.
framework.logging(false); // Отключить логи framework.logging(true); // Включить логи
Аутентификация
Используйте пароль для защиты редактирования кода:
<framework>
pass.mySecretPassword
config.title "Protected Canvas"
draw.rect 0 0 600 600 #1e293b
</framework>
<script>
// В консоли браузера:
framework.auth('mySecretPassword');
framework.addLine('draw.circle 300 300 100 #00d9ff');
framework.run();
</script>
Полные примеры
Интерактивная рисовалка
<framework>
config.title "Interactive Drawing"
animate.start
draw.rect 0 0 600 600 #0f172a
if input.clicks.length > 0
lastClick = input.clicks[input.clicks.length - 1]
draw.circle lastClick.x lastClick.y 20 #00d9ff
draw.text "Click to draw" 300 30 #94a3b8 16px
animate.end
</framework>
Орбитальная система
<framework> config.title "Orbital System" animate.start draw.rect 0 0 600 600 #0f172a // Звезда в центре draw.circle 300 300 30 #ffff00 // Планета 1 x1 = 300 + Math.cos(t) * 100 y1 = 300 + Math.sin(t) * 100 draw.circle x1 y1 15 #0099ff // Планета 2 x2 = 300 + Math.cos(t * 0.5) * 150 y2 = 300 + Math.sin(t * 0.5) * 150 draw.circle x2 y2 20 #ff6b6b animate.end </framework>