Створення графіки SVG за допомогою Javascript?


80

Як я можу створити SVG-графіку за допомогою JavaScript?

Чи всі браузери підтримують SVG?


2
Через 2 роки розробки svg можна сказати, що це приємно, але без повної підтримки з боку всіх основних браузерів не гірше використовувати. Якщо ви запускаєте нову програму, виберіть інший формат.
Камарей

31
Той, хто читає це запитання та відповіді, пам’ятайте, що багато чого змінилося після того, як його задали ще в 2009 році, і SVG тепер підтримується усіма основними браузерами (спочатку не потрібні поліфіли)!
Jeach

1
Ось посилання, щоб побачити фактично підтримувані браузери. caniuse.com/#feat=svg Безперечно збережено, щоб використовувати svg сьогодні.
Лукас Лієсіс,

Відповіді:


30

Погляньте на цей список у Вікіпедії про те, які браузери підтримують 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"); 

@Aculeo: Дякую, виправлено.
шнадер

будь-яке рішення для firefox ще?
Дінеш

1
Слід справді пояснити evt. Дивіться відповідь themadmax щодо рішення, яке працює.
AldaronLau

24

Ця відповідь від 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);

5
Це вже не відповідає дійсності, і цю відповідь слід оновити або видалити.
Девід Мортенсон

18

Щоб зробити це у переглядачі, я настійно рекомендую RaphaelJS . Він має чудово хороший API і робить VML в IE, який не може зрозуміти SVG.


9

Усі сучасні браузери, крім IE, підтримують SVG

Ось підручник, який надає покрокове керівництво щодо роботи з SVG за допомогою javascript:

Сценарії SVG з JavaScript Частина 1: Просте коло

Як уже сказав Болдевін , якщо хочете

Щоб зробити це у переглядачі, я настійно рекомендую RaphaelJS: rapaheljs.com

Хоча зараз я відчуваю, що розмір бібліотеки занадто великий. Він має безліч чудових функцій, деякі з яких вам можуть не знадобитися.


"Усі сучасні браузери, крім IE"? :)
tuomassalo

2
Жодна версія IE не є сучасною. У випадку SVG, IE (через v11) не підтримує SMIL, тому забудьте про будь-яку цікаву анімацію!
Geek Stocks

7

Мені дуже подобається бібліотека jQuery SVG . Це допомагає мені кожного разу, коли мені потрібно маніпулювати SVG. Це справді полегшує роботу з SVG з JavaScript.


5

Я не знайшов відповіді на відповідність, тому для створення кола та додавання до 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

Не всі браузери підтримують SVG. Я вважаю, що IE потрібен плагін для їх використання. Оскільки svg - це лише документ xml, JavaScript може їх створювати. Однак я не впевнений у завантаженні його в браузер. Я цього не пробував.

Це посилання містить інформацію про javascript та svg:

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


2

Існує плагін jQuery, який дозволяє маніпулювати SVG через Javascript:

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

З його вступу:

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



2

Існує декілька бібліотек графіки SVG, що використовують Javascript, наприклад: Snap, Raphael, D3. Або ви можете безпосередньо взаємодіяти з SVG за допомогою простого javascript.

На даний момент усі останні версії браузерів підтримують SVG v1.1. SVG v2.0 знаходиться у робочому проекті і занадто рано використовувати його.

Ця стаття показує, як взаємодіяти з SVG за допомогою Javascript, і містить посилання на посилання для підтримки браузера. Взаємодія з SVG



0

Отже, якщо ви хочете створювати свої речі SVG поштучно в JS, тоді не просто використовуйте createElement(), вони не будуть малювати, використовуйте замість цього:

var ci = document.createElementNS("http://www.w3.org/2000/svg", "circle");

-1

В даний час всі основні браузери підтримують svg . Створення Г в JS дуже простий ( в даний час innerHTML=...є досить швидко )

element.innerHTML = `
    <svg viewBox="0 0 400 100" >
      <circle id="circ" cx="50" cy="50" r="50" fill="red" />
    </svg>
`;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.