HTML5 Canvas и SVG могут показаться похожими, так как они являются веб-технологиями, которые позволяют создавать и управлять графикой в браузере, но они принципиально отличаются.
В SVG вы рисуете с помощью XML. В Canvas, вы рисуете с JavaScript. Canvas-изображение разбито на пиксели, после отрисовки они как бы "стираются" или "забываются". SVG, с другой стороны, создает DOM узлы, доступные пока он не удален. Обе технологии имеют свои преимущества и недостатки.
SVG не зависит от разрешения экрана, что делает SVG отличным выбором для пользовательских интерфейсов всех размеров, так как позволяет масштабирование . SVG использует легко доступный формат XML . SVG может быть анимированно с помощью использования декларативного синтаксиса, или с помощью JavaScript. Каждый элемент становится частью и доступен через SVG DOM API в JavaScript. Однако, многократные обращения к DOM замедляют загрузку страницы.
Этот код SVG:
пример использования SVG - http://maxistar.ru/kitchen/test_svg.html
Canvas отображается в пикселях. Масштабирование может привести к пикселизации. Canvas изначально менее доступен, доступность ограничивается в основном в рендеринге содержимого. Интерактивность требует перерисовки каждого пикселя. К тому же нет DOM узлов для того, что вы рисуете. Там нет анимации API, вместо таймера, как правило, используется многократное обновление сanvas. Canvas , однако, очень хорошо подходит для редактирования изображений, генерации растровой графики, также как для игр, и операции, требующие манипуляций на уровне пикселей . Canvas может быть экспортирован в GIF или JPEG.
С помощью Canvas можно изображать 2D-проекции трехмерных объектов. В силу того, что все преобразования выполняются на пиксельном уровне, достаточно просто создать необходимые интерфейсы для изометрических проекций трехмерных объектов.
Так как Canvas реализован еще не во всех браузерах, для этого в спецификации HTML5 описаны действия, которые нужно выполнять браузеру если поддержка нового элемента отсутствует.
Альтернативный контент нужно поместить внутри тега <canvas>:
Браузеры, которые не поддерживают canvas, будут игнорировать контейнер и будут обрабатывать только его содержание. Другие браузеры будут игнорировать содержание контейнера, а обработают только сам контейнер.
Тег <canvas> предназначен для рисованиz 2D и 3D объектов.
При инициализации тег пуст и для рисования нам необходимо получить доступ к обрабатываемому контексту (rendering context).
Пример:
пример использования Canvas - http://html5blog.ru/examples/canvas-simple-example.php
вот например флаг Японии с помощью Canvas
В SVG вы рисуете с помощью XML. В Canvas, вы рисуете с JavaScript. Canvas-изображение разбито на пиксели, после отрисовки они как бы "стираются" или "забываются". SVG, с другой стороны, создает DOM узлы, доступные пока он не удален. Обе технологии имеют свои преимущества и недостатки.
SVG не зависит от разрешения экрана, что делает SVG отличным выбором для пользовательских интерфейсов всех размеров, так как позволяет масштабирование . SVG использует легко доступный формат XML . SVG может быть анимированно с помощью использования декларативного синтаксиса, или с помощью JavaScript. Каждый элемент становится частью и доступен через SVG DOM API в JavaScript. Однако, многократные обращения к DOM замедляют загрузку страницы.
Этот код SVG:
<?xml version="1.0"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" width="100" height="50"> <ellipse cx="50" cy="25" rx="50" ry="25" fill="blue" stroke="none" /> </svg>
пример использования SVG - http://maxistar.ru/kitchen/test_svg.html
Canvas отображается в пикселях. Масштабирование может привести к пикселизации. Canvas изначально менее доступен, доступность ограничивается в основном в рендеринге содержимого. Интерактивность требует перерисовки каждого пикселя. К тому же нет DOM узлов для того, что вы рисуете. Там нет анимации API, вместо таймера, как правило, используется многократное обновление сanvas. Canvas , однако, очень хорошо подходит для редактирования изображений, генерации растровой графики, также как для игр, и операции, требующие манипуляций на уровне пикселей . Canvas может быть экспортирован в GIF или JPEG.
С помощью Canvas можно изображать 2D-проекции трехмерных объектов. В силу того, что все преобразования выполняются на пиксельном уровне, достаточно просто создать необходимые интерфейсы для изометрических проекций трехмерных объектов.
Так как Canvas реализован еще не во всех браузерах, для этого в спецификации HTML5 описаны действия, которые нужно выполнять браузеру если поддержка нового элемента отсутствует.
Альтернативный контент нужно поместить внутри тега <canvas>:
<canvas id="example" width="150" height="150">
<p>Ваш браузер не поддерживает canvas</p>
</canvas>
<p>Ваш браузер не поддерживает canvas</p>
</canvas>
Браузеры, которые не поддерживают canvas, будут игнорировать контейнер и будут обрабатывать только его содержание. Другие браузеры будут игнорировать содержание контейнера, а обработают только сам контейнер.
Тег <canvas> предназначен для рисованиz 2D и 3D объектов.
При инициализации тег пуст и для рисования нам необходимо получить доступ к обрабатываемому контексту (rendering context).
Пример:
<!DOCTYPE html>
<html>
<head>
<title>Canvas tutorial</title>
<script type="text/javascript">
function draw(){
var canvas = document.getElementById('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
}
}
</script>
<style type="text/css">
canvas { border: 1px solid black; }
</style>
</head>
<body onload="draw();">
<canvas id="tutorial" width="150" height="150"></canvas>
</body>
</html>
пример использования Canvas - http://html5blog.ru/examples/canvas-simple-example.php
вот например флаг Японии с помощью Canvas
<script> var el= document.getElementById("flag"); if (el && el.getContext) { var context = el.getContext('2d'); if(context){ context.fillStyle = "#ffffff"; context.strokeStyle = "#CCCCCC"; context.lineWidth = 1; context.shadowOffsetX = 5; context.shadowOffsetY = 5; context.shadowBlur = 4; context.shadowColor = 'rgba(0, 0, 0, 0.4)'; context.strokeRect(10, 10, 300, 200); context.fillRect(10, 10, 300, 200); context.shadowColor='rgba(0,0,0,0)'; context.fillStyle = "#d60818"; context.arc(160, 107, 60, 0, Math.PI*2, false); context.fill(); } } </script>
Canvas функции и свойства:
Styles
Set the fillStylecontext.fillStyle="color"Set the strokeStyle
context.strokeStyle="color"Line widths
context.lineWidth=numberLine join styles
context.lineJoin="bevel || round || miter"Line end styles
context.lineCap="butt || round || square"
Rectangles
Draw a rectanglecontext.strokeRect(left, top, width, height)
Fill a rectangle
context.fillRect(left, top, width, height)Erase a rectangle
context.clearRect(left, top, width, height)
Paths
Begin a pathcontext.beginPathComplete a path
context.closePathMove the pen to a location
context.moveTo(horizontal, vertical)Draw a straight line from current point to a new location
context.lineTo(horizontal, vertical)Stroke the current path
context.Stroke()Fill the current path
context.fill()
Shadows
Shadow colorcontext.shadowColor="color"Shadow horizontal offset
context.shadowOffsetX=numberShadow vertical offset
context.shadowOffsetY=numberShadow blur
context.shadowBlur=number
Комментарии
Отправить комментарий