MultClip » Мастерская » SVG: добавление внешнего css и javascript в документ для web

SVG: добавление внешнего css и javascript в документ для web

SVG: добавление внешнего css и javascript в документ для web

Как встроить внешний css стиль и javascript в svg файл. В прошлой статье мы рассмотрели вариант интегрирования в svg документ css и js кода, однако, существует ещё один вариант добавления оных посредством загрузки их извне. Это полезно в случаях, когда сразу нескольким svg файлам необходимо присвоить один и тот же стиль и действия. Сам до сего момента ни разу ещё не пользовался этой возможностью, но вот случай подвернулся. Давайте разбираться.

Ниже представлен код готового svg с внешними css и javascript, которым можно пользоваться на практике:

Код svg файла «test.svg» с загрузкой внешнего css стиля и javascript скрипта:

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<?xml-stylesheet type='text/css' href='test_svg.css'?>
<svg
xmlns:svg='http://www.w3.org/2000/svg'
xmlns='http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink'
_width='841' _height='594'
viewBox='0 0 841 594'
version='1.1'
xml:space='preserve'
id='multclip.ru'
onload='Init(evt)'>
	<script xlink:href='test_svg.js' />
	<title>Название svg доккумента.</title>
	<desc>Описание svg документа.</desc>

    <defs>
        <rect id='pr' width='20%' height='5%' />
    </defs>
    <rect id='fon' x='0' y='0' width='100%' height='100%' class='fon'/>
	<g id='spr'>
		<use id='pr_0' xlink:href='#pr' x='0' y='0' class='plv'/>
		<use id='pr_1' xlink:href='#pr' x='5%' y='5%' class='plv'/>
		<use id='pr_2' xlink:href='#pr' x='10%' y='10%' class='plv'/>
		<use id='pr_3' xlink:href='#pr' x='15%' y='15%' class='plv'/>
		<use id='pr_4' xlink:href='#pr' x='20%' y='20%' class='plv'/>
		<use id='pr_5' xlink:href='#pr' x='25%' y='25%' class='plv'/>
		<use id='pr_6' xlink:href='#pr' x='30%' y='30%' class='plv'/>
		<use id='pr_7' xlink:href='#pr' x='35%' y='35%' class='plv'/>
		<use id='pr_8' xlink:href='#pr' x='40%' y='40%' class='plv'/>
		<use id='pr_9' xlink:href='#pr' x='45%' y='45%' class='plv'/>
		<use id='pr_10' xlink:href='#pr' x='50%' y='50%' class='plv'/>
		<use id='pr_11' xlink:href='#pr' x='55%' y='55%' class='plv'/>
	</g>
	<text x='50%' y='83%' class='txt_st'>Запуск JS скрипта</text>
	<use xlink:href='#pr' x='40%' y='80%' class='btn'  onclick='gogo(evt)'/>
	<text x='50%' y='83%' class='txt_st'>Запуск JS скрипта</text>
	<use xlink:href='#pr' x='40%' y='80%' class='btn'  onclick='gogo(evt)'/>
	<a xlink:href='http://multclip.ru/infographic/' target='_blank'>
	<text x='50%' y='95%' class='txt_st'>© MultClip.ru</text></a>
</svg>

Код внешнего css файла «test_svg.css»:

.txt_st{
	font-size30px;
	font-family:sans-serif;
	font-family:arial;
	fill:#0093C8;
	text-anchor:middle;
}
.fon{
	fill:#fff;
	stroke:#ccc;
	stroke-width:2;
}
.btn{
	fill:#777;
	fill-opacity:0.3;
	stroke:#0093C8;
	stroke-width:2;
	cursor:pointer;
	transition: all 1s ease;
}
.btn:hover{
	fill:red;
	stroke:red;
}
.plv{
	transition: all 1s ease;
	fill:red;
}

Код внешнего js файла «test_svg.js»:

var svgDocument = null;
var svgRoot = null;
var full = null;
var cnt = 0;
function Init(evt){
	if (window.svgDocument==null){
		//svgDocument = evt.target.ownerDocument;
		svgDocument = evt.target.ownerDocument.getElementById('multclip.ru');
	}
	svgRoot = svgDocument;
	fnd=svgRoot.getElementById('spr');			
	full=fnd.getElementsByTagName('use').length;
	allnovis();
	//alert('full='+full);
}
function gogo(evt){
	if(cnt<full-1){
		cnt++;
	}else{
		cnt=0;
		allnovis()
	}
	console.log(full +' = '+ cnt);
	govis();
}
function allnovis(){
	for (var i = 1; i < full; i++) {
		var fn=svgRoot.getElementById('pr_'+i);
		fn.setAttributeNS(null, 'fill-opacity', '1');
	}
}
function govis(){
	var fn=svgRoot.getElementById('pr_'+cnt);
	fn.setAttributeNS(null, 'fill-opacity', '0');
}

Основой выбран svg файл, рассматриваемым в предыдущей статье (можете кликнуть и сравнить код).

Работать с кодом очень просто:

  1. Создайте любым текстовым редактором [Notepad++/Brackets/Блокнот] 3 новых документа в текущей папке.
  2. Сохраните 3 файла: «test.svg», «test_svg.css» и «test_svg.js» в кодировке (!) Unicode: UTF-8 без BOM.
  3. Скопируйте предлагаемый код и вставьте его в тело каждого из пустых файлов.
  4. Сохраните изменения.
  5. Откройте файл любым современным браузером (кроме IE).
  6. Оцените результат интерактивного решения и, при необходимости, исправьте код.

Строку _width='841' _height='594' можно удалить, если нужно получить адаптивный «резиновый» вариант или исправить на width='841' height='594', чтобы размер svg документа был точным.

Использование внешних css стилей и внешних javascript скриптов позволяет заметно оптимизировать svg документ, а также позволит удобно вносить изменение в работе интерактивной web графики. Стоит отметить, что если Вы используете svg элементы на странице сайта, то нет особого смысла вызывать их напрямую из самого svg, а лучше подгружать css стили и js непосредственно из странички стандартным способом.

В следующей статье мы поговорим о том, как пошагово оптимизировать svg документ на реальном примере.