MultClip » Мастерская » SVG: встроенный css стиль и javascript код внутри документа

SVG: встроенный css стиль и javascript код внутри документа

SVG: встроенный css стиль и javascript код внутри документа

Как встроить css стиль и javascript в svg файл. Вопрос довольно часто возникает перед разработчиками, создающими интерактивный контент для web проектов. При помощи этого шаблона можно быстро создать svg документ с расширенными возможностями. Категорически пользуйтесь, не жалко… Мне тоже иногда попадаются годные статьи, в которых авторы делятся идеями и находками… Чем я - лучше/хуже…

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

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<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)'>

    <style type='text/css' >
    <![CDATA[
    .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;
    }
    ]]>
    </style>

    <script type='text/javascript'>
        <![CDATA[
		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');
		}
        
        ]]>
    </script>

	<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)'/>
	<a xlink:href='http://multclip.ru/infographic/' target='_blank'>
	<text x='50%' y='95%' class='txt_st'>© MultClip.ru</text></a>
</svg>

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

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

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