SlideShare a Scribd company logo
1 of 38
Download to read offline
Canvas
Alex Milkovskyi
План
1. Уведение
2. Координатная сетка
3. Импортирование картинок
4. Применение стилей и цветов
5. Текст
6. Градиенты
7. IE
1. Уведение
Canvas
● для рисования графиков,
● создания фото-композиций,
● или для создания простых (и не очень)
анимаций.
Код выглядит так.
<canvas width="300" height="225"></canvas>
У вас может быть несколько элементов
<canvas> на одной странице. Каждый холст
будет отображаться в DOM и сохранять свое
собственное состояние.
Если браузер не поддерживает
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>
Атрибут id
Если вы добавите каждому холсту атрибут
id, то можете получить к ним доступ, как и к
любому другому элементу.
<canvas id="canvas" width="150" height="150"
> </canvas>
DOM-метод getContext
● Элемент canvas имеет DOM-метод,
называемый getContext, и
предназначенный для получения
контекста отрисовки вместе с его
функциями рисования. getContext()
принимает один параметр - тип контекста.
● Мы сфокусируемся на 2D
Проверка поддержки
var canvas = document.getElementById
('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
// drawing code here
} else {
// canvas-unsupported code here
}
Минимальный шаблон: загрузить этот файл
Простой пример
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);
}
fillRect() рисует прямоугольник
Вызов метода fillRect() рисует
прямоугольник и заполняет его текущим
стилем заливки, исходно черный цвет, пока
вы его не измените. Прямоугольник
задается левым верхним углом (50, 25),
шириной (150) и высотой (100). Чтобы лучше
представить, как это работает, давайте
посмотрим на систему координат.
2. Координатная сетка
Рисование фигур
● В отличие от SVG, canvas поддерживает
только одну примитивную форму -
прямоугольники.
● Все другие формы могут быть созданы
комбинацией одного или нескольких
путей.
Прямоугольники
1. fillRect(x,y,width,height) : Рисует
заполненный прямоугольник
2. strokeRect(x,y,width,height) : Рисует
границы прямоугольника
3. clearRect(x,y,width,height) : Очищает
заданную область и делает её полностью
прозрачной
Пример рисования
прямоугольников
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);
}
}
Рисование путей
● beginPath() начальная точка установлена в позиции (0,0)
● closePath()
● stroke() прорисовывает фигуру
● fill() прорисовывает фигуру
● moveTo(x, y)
● lineTo(x, y);
Рисование путей
// Залитый треугольник
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();
Дуги
arc(x, y, radius, startAngle, endAngle,
anticlockwise)
startAngle, endAngle - определяют точки
начала и конца арки в радианах
var radians = (Math.PI/180)*degrees
anticlockwise - если true, то дуга рисуется
против часовой стрелки
Дуги
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();
кривые Безье и квадратичные
кривые
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();
пример использования кривых
Безье
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();
3. Импортирование
картинок
Обычно импортирование картинок
происходит в два этапа:
● Сначала нам нужна ссылка на объект
JavaScript Image или на другой элемент
canvas, как источник. Невозможно
использовать картинки просто передавая
URL/путь до них.
● Потом мы рисуем картинку на canvas,
используя функцию
drawImage(image, x, y, [width, height]).
Вставка картинки
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();
}
Разрезание изображений
drawImage(
image, - идентификатор
изображения
sx, sy, - координаты
вырезаного изображения
sWidth, sHeight, - высоту и
ширину вырезаного
изображения.
dx, dy, - координаты
изображения на холсте
dWidth, dHeight - масштаб
изображения
)
Пример 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);
}
4. Применение стилей и
цветов
fillStyle в значение 'orange'
1. ctx.fillStyle = "orange";
2. ctx.fillStyle = "#FFA500"; // #FA0
3. ctx.fillStyle = "rgb(255,165,0)";
4. ctx.fillStyle = "rgba(255,165,0,1)";
// Прозрачность
ctx.globalAlpha = 0.2;
5. Текстик
● font может содержать все, что вы бы добавили в
свойство CSS font. Включает стиль шрифта,
насыщенность, размер, межстрочное расстояние и
семейство гарнитур.
● textAlign управляет выравниванием текста. Похоже
на свойство CSS text-align, но не идентично ему.
Возможные значения: start,end, left, right и center.
● textBaseline говорит где рисуется текст относительно
начальной точки. Возможные значения: top, hanging,
middle, alphabetic,ideographic и bottom.
Текст
ctx.font = "bold 12px sans-serif";
ctx.textBaseline = "top";
ctx.fillText("blablablablba", 10, 43);
ctx.fillText("fafa", 58, 5);
Текст
6. Градиентик
Линейный
createLinearGradient(x0, y0, x1, y1) рисует вдоль линии
от (x0, y0) до (x1, y1).
Радиальный (в IEне пашет)
createRadialGradient(x0, y0, r0, x1, y1, r1) рисует по
конусу между двумя окружностями. Первые три
параметра определяют начальную окружность с
центром (x0, y0) и радиусом r0. Последние три
параметра представляют последнюю окружность с
центром (x1, y1) и радиусом r1.
Градиенты
Линейный
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);
Анимация
Demo....
Кроссбраузерность
● IE - 7.0 + *
● Firefox - 3.0+
● Safari - 3.0+
● Chrome - 3.0+
● Opera - 10.0+
* Internet Explorer поддерживает только с
библиотекой explorercanvas.
Что насчет IE?
Microsoft Internet Explorer (до версии 8 включительно,
текущая версия на момент написания статьи) не
поддерживает API Canvas. Тем не менее, Internet
Explorer поддерживает фирменную технологию
Майкрософт, называемую VML, которая может делать
многие из тех же вещей, что и элемент <canvas>. Так и
родился excanvas.js.
<!--[if IE]>
<script src="excanvas.js"></script>
<![endif]-->
Всем спс
1. https://developer.mozilla.
org/ru/Обучение_canvas
2. http://htmlbook.ru/html5/canvas

More Related Content

Viewers also liked

Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Noveo
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Noveo
 
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийWebinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийDenis Vasilyev
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)Антон Звонов
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiDenis Vasilyev
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Noveo
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Denis Vasilyev
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Noveo
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Denis Vasilyev
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Noveo
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Denis Vasilyev
 

Viewers also liked (20)

Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
 
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийWebinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
 
Lec 10
Lec 10Lec 10
Lec 10
 
Lec 12
Lec 12Lec 12
Lec 12
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Thread
ThreadThread
Thread
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 

Similar to Canvas

Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18OdessaFrontend
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkAlbina Tiupa
 
Ускорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassУскорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassAndrey Sitnik
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилейRoman Brovko
 
Web осень 2012 лекция 8
Web осень 2012 лекция 8Web осень 2012 лекция 8
Web осень 2012 лекция 8Technopark
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. ПрактикаVitebsk Miniq
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ontico
 
Crossbrowser Css layout
Crossbrowser Css layoutCrossbrowser Css layout
Crossbrowser Css layoutDarkestMaster
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
Создание настроек темы оформления в InSales
Создание настроек темы оформления в InSalesСоздание настроек темы оформления в InSales
Создание настроек темы оформления в InSalesInSales
 
Документ: от печати до выписок из базы данных. От аппликативного программиров...
Документ: от печати до выписок из базы данных. От аппликативного программиров...Документ: от печати до выписок из базы данных. От аппликативного программиров...
Документ: от печати до выписок из базы данных. От аппликативного программиров...Marcus Akoev
 
Павел Михайлов. Модульная сетка: практика применения
Павел Михайлов. Модульная сетка: практика примененияПавел Михайлов. Модульная сетка: практика применения
Павел Михайлов. Модульная сетка: практика примененияEgor Stremousov
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераCodeFest
 

Similar to Canvas (20)

Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass framework
 
Ускорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassУскорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, Compass
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
SASS & LESS
SASS & LESSSASS & LESS
SASS & LESS
 
Svg
SvgSvg
Svg
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей
 
Web осень 2012 лекция 8
Web осень 2012 лекция 8Web осень 2012 лекция 8
Web осень 2012 лекция 8
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. Практика
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
 
Crossbrowser Css layout
Crossbrowser Css layoutCrossbrowser Css layout
Crossbrowser Css layout
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
Создание настроек темы оформления в InSales
Создание настроек темы оформления в InSalesСоздание настроек темы оформления в InSales
Создание настроек темы оформления в InSales
 
Документ: от печати до выписок из базы данных. От аппликативного программиров...
Документ: от печати до выписок из базы данных. От аппликативного программиров...Документ: от печати до выписок из базы данных. От аппликативного программиров...
Документ: от печати до выписок из базы данных. От аппликативного программиров...
 
Павел Михайлов. Модульная сетка: практика применения
Павел Михайлов. Модульная сетка: практика примененияПавел Михайлов. Модульная сетка: практика применения
Павел Михайлов. Модульная сетка: практика применения
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 

Canvas

  • 2. План 1. Уведение 2. Координатная сетка 3. Импортирование картинок 4. Применение стилей и цветов 5. Текст 6. Градиенты 7. IE
  • 4. Canvas ● для рисования графиков, ● создания фото-композиций, ● или для создания простых (и не очень) анимаций.
  • 5. Код выглядит так. <canvas width="300" height="225"></canvas> У вас может быть несколько элементов <canvas> на одной странице. Каждый холст будет отображаться в DOM и сохранять свое собственное состояние.
  • 6. Если браузер не поддерживает 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>
  • 7. Атрибут id Если вы добавите каждому холсту атрибут id, то можете получить к ним доступ, как и к любому другому элементу. <canvas id="canvas" width="150" height="150" > </canvas>
  • 8. DOM-метод getContext ● Элемент canvas имеет DOM-метод, называемый getContext, и предназначенный для получения контекста отрисовки вместе с его функциями рисования. getContext() принимает один параметр - тип контекста. ● Мы сфокусируемся на 2D
  • 9. Проверка поддержки var canvas = document.getElementById ('tutorial'); if (canvas.getContext){ var ctx = canvas.getContext('2d'); // drawing code here } else { // canvas-unsupported code here } Минимальный шаблон: загрузить этот файл
  • 10. Простой пример 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); }
  • 11. fillRect() рисует прямоугольник Вызов метода fillRect() рисует прямоугольник и заполняет его текущим стилем заливки, исходно черный цвет, пока вы его не измените. Прямоугольник задается левым верхним углом (50, 25), шириной (150) и высотой (100). Чтобы лучше представить, как это работает, давайте посмотрим на систему координат.
  • 13. Рисование фигур ● В отличие от SVG, canvas поддерживает только одну примитивную форму - прямоугольники. ● Все другие формы могут быть созданы комбинацией одного или нескольких путей.
  • 14. Прямоугольники 1. fillRect(x,y,width,height) : Рисует заполненный прямоугольник 2. strokeRect(x,y,width,height) : Рисует границы прямоугольника 3. clearRect(x,y,width,height) : Очищает заданную область и делает её полностью прозрачной
  • 15. Пример рисования прямоугольников 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); } }
  • 16. Рисование путей ● beginPath() начальная точка установлена в позиции (0,0) ● closePath() ● stroke() прорисовывает фигуру ● fill() прорисовывает фигуру ● moveTo(x, y) ● lineTo(x, y);
  • 17. Рисование путей // Залитый треугольник 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();
  • 18. Дуги arc(x, y, radius, startAngle, endAngle, anticlockwise) startAngle, endAngle - определяют точки начала и конца арки в радианах var radians = (Math.PI/180)*degrees anticlockwise - если true, то дуга рисуется против часовой стрелки
  • 19. Дуги 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();
  • 20. кривые Безье и квадратичные кривые 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();
  • 23. Обычно импортирование картинок происходит в два этапа: ● Сначала нам нужна ссылка на объект JavaScript Image или на другой элемент canvas, как источник. Невозможно использовать картинки просто передавая URL/путь до них. ● Потом мы рисуем картинку на canvas, используя функцию drawImage(image, x, y, [width, height]).
  • 24. Вставка картинки 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(); }
  • 25. Разрезание изображений drawImage( image, - идентификатор изображения sx, sy, - координаты вырезаного изображения sWidth, sHeight, - высоту и ширину вырезаного изображения. dx, dy, - координаты изображения на холсте dWidth, dHeight - масштаб изображения )
  • 26. Пример 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); }
  • 28. fillStyle в значение 'orange' 1. ctx.fillStyle = "orange"; 2. ctx.fillStyle = "#FFA500"; // #FA0 3. ctx.fillStyle = "rgb(255,165,0)"; 4. ctx.fillStyle = "rgba(255,165,0,1)"; // Прозрачность ctx.globalAlpha = 0.2;
  • 30. ● font может содержать все, что вы бы добавили в свойство CSS font. Включает стиль шрифта, насыщенность, размер, межстрочное расстояние и семейство гарнитур. ● textAlign управляет выравниванием текста. Похоже на свойство CSS text-align, но не идентично ему. Возможные значения: start,end, left, right и center. ● textBaseline говорит где рисуется текст относительно начальной точки. Возможные значения: top, hanging, middle, alphabetic,ideographic и bottom. Текст
  • 31. ctx.font = "bold 12px sans-serif"; ctx.textBaseline = "top"; ctx.fillText("blablablablba", 10, 43); ctx.fillText("fafa", 58, 5); Текст
  • 33. Линейный createLinearGradient(x0, y0, x1, y1) рисует вдоль линии от (x0, y0) до (x1, y1). Радиальный (в IEне пашет) createRadialGradient(x0, y0, r0, x1, y1, r1) рисует по конусу между двумя окружностями. Первые три параметра определяют начальную окружность с центром (x0, y0) и радиусом r0. Последние три параметра представляют последнюю окружность с центром (x1, y1) и радиусом r1. Градиенты
  • 34. Линейный 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);
  • 36. Кроссбраузерность ● IE - 7.0 + * ● Firefox - 3.0+ ● Safari - 3.0+ ● Chrome - 3.0+ ● Opera - 10.0+ * Internet Explorer поддерживает только с библиотекой explorercanvas.
  • 37. Что насчет IE? Microsoft Internet Explorer (до версии 8 включительно, текущая версия на момент написания статьи) не поддерживает API Canvas. Тем не менее, Internet Explorer поддерживает фирменную технологию Майкрософт, называемую VML, которая может делать многие из тех же вещей, что и элемент <canvas>. Так и родился excanvas.js. <!--[if IE]> <script src="excanvas.js"></script> <![endif]-->