canvas
DESCRIPTION
Тег Canvas: - для рисования графиков, - для создания фото-композиций, - для создания простых (и не очень) анимаций.TRANSCRIPT
![Page 1: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/1.jpg)
CanvasAlex Milkovskyi
![Page 2: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/2.jpg)
План
1. Уведение2. Координатная сетка3. Импортирование картинок4. Применение стилей и цветов5. Текст6. Градиенты7. IE
![Page 3: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/3.jpg)
1. Уведение
![Page 4: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/4.jpg)
Canvas
● для рисования графиков, ● создания фото-композиций, ● или для создания простых (и не очень)
анимаций.
![Page 5: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/5.jpg)
Код выглядит так.
<canvas width="300" height="225"></canvas>
У вас может быть несколько элементов <canvas> на одной странице. Каждый холст будет отображаться в DOM и сохранять свое собственное состояние.
![Page 6: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/6.jpg)
Если браузер не поддерживает Canvas
<canvas id="stockGraph" width="150" height="150"> Чувак, установи норм браузер!</canvas>
<canvas id="clock" width="150" height="150"> <img src="images/clock.png" width="150" height="150" alt=""/></canvas>
![Page 7: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/7.jpg)
Атрибут id
Если вы добавите каждому холсту атрибут id, то можете получить к ним доступ, как и к любому другому элементу.
<canvas id="canvas" width="150" height="150"> </canvas>
![Page 8: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/8.jpg)
DOM-метод getContext
● Элемент canvas имеет DOM-метод, называемый getContext, и предназначенный для получения контекста отрисовки вместе с его функциями рисования. getContext() принимает один параметр - тип контекста.
● Мы сфокусируемся на 2D
![Page 9: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/9.jpg)
Проверка поддержки
var canvas = document.getElementById('tutorial');if (canvas.getContext){ var ctx = canvas.getContext('2d'); // drawing code here} else { // canvas-unsupported code here}
Минимальный шаблон: загрузить этот файл
![Page 10: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/10.jpg)
Простой пример
function draw() { var canvas = document.getElementById("canvas"); if (canvas.getContext) { var ctx = canvas.getContext("2d");
ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, 55, 50);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 55, 50); } }
![Page 11: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/11.jpg)
fillRect() рисует прямоугольник
Вызов метода fillRect() рисует прямоугольник и заполняет его текущим стилем заливки, исходно черный цвет, пока вы его не измените. Прямоугольник задается левым верхним углом (50, 25), шириной (150) и высотой (100). Чтобы лучше представить, как это работает, давайте посмотрим на систему координат.
![Page 12: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/12.jpg)
2. Координатная сетка
![Page 13: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/13.jpg)
Рисование фигур
● В отличие от SVG, canvas поддерживает только одну примитивную форму - прямоугольники.
● Все другие формы могут быть созданы комбинацией одного или нескольких путей.
![Page 14: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/14.jpg)
Прямоугольники
1. fillRect(x,y,width,height) : Рисует заполненный прямоугольник
2. strokeRect(x,y,width,height) : Рисует границы прямоугольника
3. clearRect(x,y,width,height) : Очищает заданную область и делает её полностью прозрачной
![Page 15: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/15.jpg)
Пример рисования прямоугольников
function draw(){ var canvas = document.getElementById('tutorial'); if (canvas.getContext){ var ctx = canvas.getContext('2d');
ctx.fillRect(25,25,100,100); ctx.clearRect(45,45,60,60); ctx.strokeRect(50,50,50,50); }}
![Page 16: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/16.jpg)
Рисование путей
● beginPath() начальная точка установлена в позиции (0,0)
● closePath()● stroke() прорисовывает фигуру
● fill() прорисовывает фигуру
● moveTo(x, y)● lineTo(x, y);
![Page 17: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/17.jpg)
Рисование путей
// Залитый треугольникctx.beginPath();ctx.moveTo(25,25);ctx.lineTo(105,25);ctx.lineTo(25,105);ctx.fill();
// Очерченный треугольникctx.beginPath();ctx.moveTo(125,125);ctx.lineTo(125,45);ctx.lineTo(45,125);ctx.closePath();ctx.stroke();
![Page 18: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/18.jpg)
Дуги
arc(x, y, radius, startAngle, endAngle, anticlockwise)
startAngle, endAngle - определяют точки начала и конца арки в радианахvar radians = (Math.PI/180)*degrees
anticlockwise - если true, то дуга рисуется против часовой стрелки
![Page 19: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/19.jpg)
Дуги
ctx.beginPath();ctx.arc(75,75,50,0,Math.PI*2,true); // Внешний кругctx.moveTo(110,75);ctx.arc(75,75,35,0,Math.PI,false); // Ротctx.moveTo(65,65);ctx.arc(60,65,5,0,Math.PI*2,true); // Левый глазctx.moveTo(95,65);ctx.arc(90,65,5,0,Math.PI*2,true); // Правый глазctx.stroke();
![Page 20: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/20.jpg)
кривые Безье и квадратичные кривые
ctx.beginPath();ctx.moveTo(75,25);ctx.quadraticCurveTo(25,25,25,62.5);ctx.quadraticCurveTo(25,100,50,100);ctx.quadraticCurveTo(50,120,30,125);ctx.quadraticCurveTo(60,120,65,100);ctx.quadraticCurveTo(125,100,125,62.5);ctx.quadraticCurveTo(125,25,75,25);ctx.stroke();
![Page 21: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/21.jpg)
пример использования кривых Безье
ctx.beginPath();ctx.moveTo(75,40);ctx.bezierCurveTo(75,37,70,25,50,25);ctx.bezierCurveTo(20,25,20,62.5,20,62.5);ctx.bezierCurveTo(20,80,40,102,75,120);ctx.bezierCurveTo(110,102,130,80,130,62.5);ctx.bezierCurveTo(130,62.5,130,25,100,25);ctx.bezierCurveTo(85,25,75,37,75,40);ctx.fill();
![Page 22: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/22.jpg)
3. Импортирование картинок
![Page 23: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/23.jpg)
Обычно импортирование картинок происходит в два этапа:
● Сначала нам нужна ссылка на объект JavaScript Image или на другой элемент canvas, как источник. Невозможно использовать картинки просто передавая URL/путь до них.
● Потом мы рисуем картинку на canvas, используя функцию drawImage(image, x, y, [width, height]).
![Page 24: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/24.jpg)
Вставка картинки
var ctx = document.getElementById('canvas'). getContext('2d');var img = new Image();img.src = 'images/backdrop.png';// или var img = document.getElementById('img');// или var img = $('#img');img.onload = function(){ ctx.drawImage(img,0,0); ctx.beginPath(); ctx.moveTo(30,96); ctx.lineTo(70,66); ctx.stroke();}
![Page 25: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/25.jpg)
Разрезание изображений
drawImage( image, - идентификатор изображения sx, sy, - координаты вырезаного изображения sWidth, sHeight, - высоту и ширину вырезаного изображения. dx, dy, - координаты изображения на холсте dWidth, dHeight - масштаб изображения)
![Page 26: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/26.jpg)
Пример 3 использования изображения
function draw() { var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d');
// Draw slice ctx.drawImage(document.getElementById('source'), 33,71,104,124,21,20,87,104);
// Draw frame ctx.drawImage(document.getElementById('frame'),0,0);}
![Page 27: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/27.jpg)
4. Применение стилей и цветов
![Page 28: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/28.jpg)
fillStyle в значение 'orange'
1. ctx.fillStyle = "orange"; 2. ctx.fillStyle = "#FFA500"; // #FA03. ctx.fillStyle = "rgb(255,165,0)"; 4. ctx.fillStyle = "rgba(255,165,0,1)";
// Прозрачностьctx.globalAlpha = 0.2;
![Page 29: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/29.jpg)
5. Текстик
![Page 30: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/30.jpg)
● font может содержать все, что вы бы добавили в свойство CSS font. Включает стиль шрифта, насыщенность, размер, межстрочное расстояние и семейство гарнитур.
● textAlign управляет выравниванием текста. Похоже на свойство CSS text-align, но не идентично ему. Возможные значения: start,end, left, right и center.
● textBaseline говорит где рисуется текст относительно начальной точки. Возможные значения: top, hanging, middle, alphabetic,ideographic и bottom.
Текст
![Page 31: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/31.jpg)
ctx.font = "bold 12px sans-serif";ctx.textBaseline = "top";ctx.fillText("blablablablba", 10, 43);ctx.fillText("fafa", 58, 5);
Текст
![Page 32: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/32.jpg)
6. Градиентик
![Page 33: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/33.jpg)
ЛинейныйcreateLinearGradient(x0, y0, x1, y1) рисует вдоль линии от (x0, y0) до (x1, y1).
Радиальный (в IEне пашет)createRadialGradient(x0, y0, r0, x1, y1, r1) рисует по конусу между двумя окружностями. Первые три параметра определяют начальную окружность с центром (x0, y0) и радиусом r0. Последние три параметра представляют последнюю окружность с центром (x1, y1) и радиусом r1.
Градиенты
![Page 34: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/34.jpg)
Линейный
var my_gradient = context.createLinearGradient(0, 0, 300, 225);my_gradient.addColorStop(0, "black");my_gradient.addColorStop(1, "white");context.fillStyle = my_gradient;context.fillRect(0, 0, 300, 225);
![Page 35: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/35.jpg)
Анимация
Demo....
![Page 36: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/36.jpg)
Кроссбраузерность
● IE - 7.0 + *● Firefox - 3.0+● Safari - 3.0+● Chrome - 3.0+● Opera - 10.0+
* Internet Explorer поддерживает только с библиотекой explorercanvas.
![Page 37: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/37.jpg)
Что насчет IE?Microsoft Internet Explorer (до версии 8 включительно, текущая версия на момент написания статьи) не поддерживает API Canvas. Тем не менее, Internet Explorer поддерживает фирменную технологию Майкрософт, называемую VML, которая может делать многие из тех же вещей, что и элемент <canvas>. Так и родился excanvas.js.
<!--[if IE]><script src="excanvas.js"></script><![endif]-->
![Page 38: Canvas](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f4377b4c905cd048b55e8/html5/thumbnails/38.jpg)
Всем спс
1. https://developer.mozilla.org/ru/Обучение_canvas
2. http://htmlbook.ru/html5/canvas