Мой Справочник | JavaScript | Canvas - Примеры

Tutorial

// DOM-элемент канваса

var canvas = document.querySelector('canvas'); // Контекст отрисовки var ctx = canvas.getContext('2d');

// рисуем 1 прямоугольник

(лев. верх. угол, ширина, высота) - по ум. заливка чёрная ctx.fillRect(0,0, 100, 100); // заливка 2 прямоугольника - переопределение заливки ctx.fillStyle = 'blue'; // рисуем 2 прямоугольник с новой заливкой ctx.fillRect(200,0, 200, 200);

// создаём ЛИНЕЙНЫЙ ГРАДИЕНТ

(координаты точек из какой в какую он перетекает) var gradient1 = ctx.createLinearGradient(550,0, 850,0); gradient1.addColorStop(0.00, 'red'); gradient1.addColorStop(0.25, 'orange'); gradient1.addColorStop(0.50, 'yellow'); gradient1.addColorStop(0.75, 'green'); gradient1.addColorStop(1.00, 'blue'); // заливаем градиентом ctx.fillStyle = gradient1; // создаём прямоугольник с градиентом ctx.fillRect(550,0, 300, 300);

// создаём РАДИАЛЬНЫЙ ГРАДИЕНТ

(координаты центра первой окр(x,y,R) и второй) var gradient2 = ctx.createRadialGradient(150,400,0, 150,400,50); gradient2.addColorStop(0, 'red'); gradient2.addColorStop(1, 'orange'); // заливаем градиентом ctx.fillStyle = gradient2; // рисуем квадрат залитый рад. град. ctx.fillRect(100,350, 100, 100);

// РАМКИ

// цвет рамки ctx.strokeStyle = 'red'; // рисуем рамку ctx.strokeRect(90,340, 120, 120);

// ОЧИСКА хоста (дырка на чёрном квадрате)

ctx.clearRect(0, 0, 15, 15);

// ФИГУРЫ

ctx.beginPath(); // ставим перо ctx.moveTo(100, 100); // хочу передвинуть перо на эти точки ctx.lineTo(80, 60); ctx.lineTo(110, 80); ctx.lineTo(125, 40); ctx.lineTo(140, 80); ctx.lineTo(170, 60); ctx.lineTo(150, 100); ctx.lineTo(150, 100); ctx.bezierCurveTo(140, 90, 110, 90, 100, 100); ctx.stroke();

// ТЕКСТ

// кегль + гарнитура ctx.font = '30px Consolas'; // чтобы не вылазил ctx.textBaseline = 'hanging'; ctx.fillText('Привет!', 0, 120); ctx.fillText('Как дела?', 0, 148);

// ТЕПЛОВЫЕ КАРТЫ

/** * Переменные, названные заглавными буквами, по соглашению, считаются * постоянными. * @constant {number} */ // размеры canvas var TILE_SIZE = 256; /** @constant {number} */ var DIAMOND_SIZE = 16; /** * Функция getMapTile будет использоваться * для отрисовки прямоугольников поверх карты * @return {HTMLCanvasElement} */ var getMapTile = function() { // Каждый канвас будет замощен ромбами, // непрозрачность заливки которых будет означать // количество ресторанов под указанным ромбом. // Для простоты непрозрачность будем получать, // генерируя случайное число. // тег canvas сохраняем в пер. var canvasElement = document.createElement('canvas'); // добавляем атрибуты canvasElement.setAttribute('width', TILE_SIZE); canvasElement.setAttribute('height', TILE_SIZE); // контекст var ctx = canvasElement.getContext('2d'); var x; var y = -DIAMOND_SIZE / 2; var row = 1; while (y < TILE_SIZE) { x = row % 2 === 0 ? -DIAMOND_SIZE / 2 : 0; while (x < TILE_SIZE) { drawDiamond(ctx, DIAMOND_SIZE, x, y); x += DIAMOND_SIZE; } y += DIAMOND_SIZE / 2; row++; } // добавляем canvas на страницу return canvasElement; }; /** * Рисует ромб, вписанный в прямоугольник * с заданными координатами * @param {CanvasRenderingContext2D} ctx * @param {number} size * @param {number} x * @param {number} y */ var drawDiamond = function(ctx, size, x, y) { ctx.beginPath(); ctx.moveTo(x + size / 2, y); ctx.lineTo(x + size, y + size / 2); ctx.lineTo(x + size / 2, y + size); ctx.lineTo(x, y + size / 2); ctx.lineTo(x + size / 2, y); ctx.fillStyle = getRandomColor(); ctx.fill(); }; /** @return {string} */ var getRandomColor = function() { return 'rgba(30, 128, 30, ' + (Math.random() * 0.6).toFixed(1) + ')'; }; document.body.appendChild(getMapTile());

// Замощение квадратами

function draw() { for (var i=0;i<6;i++){ for (var j=0;j<6;j++){ ctx.fillStyle = 'rgb(' + Math.floor(255-42.5*i) + ',' + Math.floor(255-42.5*j) + ',0)'; ctx.fillRect((j*25) + 300, (i*25) + 300,25,25); } } } draw();