БлогNot. Делаем "векторную" графику на Javascript

Делаем "векторную" графику на Javascript

В том смысле, что канва будет менять размер вместе с окном браузера, а картинка перерисовываться после изменения размеров канвы. При этом размеры картинки должны зависеть от размеров канвы. У нас картинка будет состоять из единственной закрашенной окружности, но подход нетрудно расширить и на большее количество объектов.

Итак, в документе есть канва, размер которой не указан атрибутами тега <canvas>:

<canvas id="dynamicCanvas" style="background-color:black;"></canvas>

Этот размер будет установлен яваскриптом, расположенным ниже в документе:

<script type="text/javascript">
(function() {
 var canvas = document.getElementById('dynamicCanvas');
 var ctx = canvas.getContext('2d');
 var width = canvas.width = document.documentElement.clientWidth; //клиентская ширина окна
 var height = canvas.height = window.innerHeight; //а высота - из высоты окна
 //
 // здесь будет остальной код скрипта
 //
})();
</script>
<noscript>Нужен включённый Javascript для работы приложения</noscript>

Высота взята из объекта window, чтобы канва не оказалось маленькой высоты, если страница не наполнена содержимым.

Затем поставим слушатель события resize, который будет менять размеры канвы и вызывать функцию перерисовки через нужное количество миллисекунд, например, 100:

window.addEventListener('resize', resize);
function resize() {
 width = canvas.width = document.documentElement.clientWidth;
 height = canvas.height = window.innerHeight;
 timerId = setTimeout(redraw, 100);
}

Функция перерисовки делает то, что мы там запрограммировали, в данном случае - рисует круг-"солнышко":

var timerId;

function redraw() {
 var width = canvas.width = document.documentElement.clientWidth;
 var height = canvas.height = window.innerHeight;
 var cx = Math.floor (width/2);
 var cy = Math.floor (height/2);
 var size = Math.floor(Math.min(width,height)/2-10);
 ctx.save();
 ctx.beginPath();
 ctx.arc (cx, cy, size, 0, Math.PI*2, true);
 ctx.fillStyle = '#ffb41f';
 ctx.fill ();
 ctx.lineWidth = 5;
 ctx.strokeStyle = 'yellow';
 ctx.stroke();
 ctx.closePath();
 ctx.restore();
 clearTimeout (timerId);
}

Посмотреть, как работает всё вместе можно, открыв в новом окне (вкладке) скрипт по ссылке и меняя размеры окна.

 Скрипт в работе (новое окно/вкладка)

 CanvasDynamicSize.html, файл приложения (1 Кб)

Полный исходный текст можно увидеть, нажав на свободном белом крае страницы правую кнопку мыши и выбрав пункт меню "Исходный код страницы", "Просмотр HTML-кода" и т.п. (название пункта зависит от браузера).

06.12.2017, 14:11 [1921 просмотр]


теги: javascript графика

К этой статье пока нет комментариев, Ваш будет первым