Создание SVG-графики с использованием Javascript? - PullRequest
78 голосов
/ 23 июня 2009

Как я могу создавать SVG-графику, используя Javascript?

Все ли браузеры поддерживают SVG?

Ответы [ 12 ]

32 голосов
/ 23 июня 2009

Посмотрите этот список в Википедии о том, какие браузеры поддерживают SVG. Он также предоставляет ссылки на более подробную информацию в сносках. Например, Firefox поддерживает базовый SVG, но в данный момент ему не хватает большинства функций анимации.

Учебник о том, как создавать объекты SVG с использованием Javascript, можно найти здесь :

var svgns = "http://www.w3.org/2000/svg";
var svgDocument = evt.target.ownerDocument;
var shape = svgDocument.createElementNS(svgns, "circle");
shape.setAttributeNS(null, "cx", 25);
shape.setAttributeNS(null, "cy", 25);
shape.setAttributeNS(null, "r",  20);
shape.setAttributeNS(null, "fill", "green"); 
23 голосов
/ 26 июня 2009

Этот ответ с 2009 года. Теперь вики сообщества, если кто-то захочет обновить его.

IE нужен плагин для отображения SVG. Наиболее распространенным является тот, который доступен для загрузки Adobe; однако Adobe больше не поддерживает и не разрабатывает его. Firefox, Opera, Chrome, Safari, все будут отображать базовый SVG отлично, но будут сталкиваться с причудами, если используются расширенные функции, так как поддержка неполная. Firefox не поддерживает декларативную анимацию.

Элементы SVG могут быть созданы с помощью JavaScript следующим образом:

// "circle" may be any tag name
var shape = document.createElementNS("http://www.w3.org/2000/svg", "circle");
// Set any attributes as desired
shape.setAttribute("cx", 25);
shape.setAttribute("cy", 25);
shape.setAttribute("r",  20);
shape.setAttribute("fill", "green");
// Add to a parent node; document.documentElement should be the root svg element.
// Acquiring a parent element with document.getElementById() would be safest.
document.documentElement.appendChild(shape);

Спецификация SVG описывает интерфейсы DOM для всех элементов SVG. Например, SVGCircleElement, который создан выше, имеет атрибуты cx, cy и r для центральной точки и радиуса, к которым можно получить прямой доступ. Это атрибуты SVGAnimatedLength, которые имеют свойство baseVal для нормального значения и свойство animVal для анимированного значения. Браузеры в настоящее время не поддерживают надежно свойство animVal. baseVal - это SVGLength, значение которого задается свойством value.

Следовательно, для анимации сценария можно также установить эти свойства DOM для управления SVG. Следующий код должен быть эквивалентен приведенному выше коду:

var shape = document.createElementNS("http://www.w3.org/2000/svg", "circle");
shape.cx.baseVal.value = 25;
shape.cy.baseVal.value = 25;
shape.r.baseVal.value = 20;
shape.setAttribute("fill", "green");
document.documentElement.appendChild(shape);
18 голосов
/ 24 июня 2009

Чтобы сделать это кросс-браузерным, я настоятельно рекомендую RaphaelJS . У него чертовски хороший API и VML в IE, который не понимает SVG.

9 голосов
/ 27 апреля 2011

Все современные браузеры, кроме IE, поддерживают SVG

Вот учебник, который предоставляет пошаговое руководство по работе с SVG с использованием javascript:

Скрипты SVG с JavaScript. Часть 1. Простой круг

Как Болдевин уже сказал, если хотите

Чтобы сделать это кросс-браузерным, я настоятельно рекомендую RaphaelJS: rapaheljs.com

Хотя сейчас я чувствую, что размер библиотеки слишком велик. Он имеет много замечательных функций, некоторые из которых вам могут не понадобиться.

7 голосов
/ 05 сентября 2010

Мне очень нравится библиотека jQuery SVG . Это помогает мне каждый раз, когда мне нужно манипулировать с SVG. Это действительно облегчает работу с SVG из JavaScript.

5 голосов
/ 03 октября 2016

Я не нашел ответа, поэтому для создания круга и добавления в svg попробуйте это:

var svgns = "http://www.w3.org/2000/svg";
var svg = document.getElementById('svg');
var shape = document.createElementNS(svgns, "circle");
shape.setAttributeNS(null, "cx", 25);
shape.setAttributeNS(null, "cy", 25);
shape.setAttributeNS(null, "r",  20);
shape.setAttributeNS(null, "fill", "green");
svg.appendChild(shape);
<svg id="svg" width="100" height="100"></svg>
2 голосов
/ 19 марта 2015

Существует несколько библиотек SVG-графики, использующих Javascript, таких как: Snap, Raphael, D3. Или вы можете напрямую связать SVG с простым javascript.

В настоящее время все последние версии браузеров поддерживают SVG v1.1. SVG v2.0 находится в рабочем проекте и слишком рано его использовать.

В этой статье показано, как взаимодействовать с SVG с помощью Javascript, и есть ссылки на ссылки для поддержки браузера. Взаимодействие с SVG

2 голосов
/ 12 сентября 2013

Вы можете использовать d3.js. Это простой в использовании и мощный.

D3.js - это библиотека JavaScript для управления документами на основе данных. D3 помогает вам оживлять данные, используя HTML, SVG и CSS.

2 голосов
/ 23 июня 2009

Есть плагин jQuery, который позволяет вам манипулировать SVG через Javascript:

http://plugins.jquery.com/project/svg

Из вступления:

Поддерживается изначально в Firefox, Opera, и Safari и через Adobe SVG зритель или игрок Renesis в IE, SVG позволяет отображать графику в вашем Интернет страницы. Теперь вы можете легко управлять холст SVG из вашего JavaScript Код.

2 голосов
/ 23 июня 2009

Нет, не все браузеры поддерживают SVG. Я считаю, что IE нуждается в плагине, чтобы использовать их. Поскольку svg - это просто документ XML, JavaScript может их создавать. Я не уверен насчет загрузки его в браузер. Я не пробовал это.

Эта ссылка содержит информацию о javascript и svg:

http://srufaculty.sru.edu/david.dailey/svg/SVGAnimations.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...