принудительная загрузка svg
Добрый день!
Есть главная страница, в ней через тег object подгружаются svg файлы <div id="i_am" > <object id='svg_i_am' data="/svgpic/i_am.svg" type="image/svg+xml"> </object> </div> <div id="line1_size"> <object id='svg_right_line' data="/svgpic/line.svg" type="image/svg+xml"> </object> </div> <div id="line2_size" > <object id='svg_down_line' data="/svgpic/line_down.svg" type="image/svg+xml"> </object> </div> Есть функция которая при клике мышкой на определенном диве поочередно запускает анимацию этих svg.Но возникает проблема ..при первом клике сначало происходит загрузка этих svg в dom и только после это уже на втором клике анимация работает нормально. Пробовал использовать addEventListener('load',function(){}) НО второй параметр требует указать функцию для выполнения.А мне надо чтобы элементы подгрузились и уже потом при клике мышкой начала выполняться функция . Как можно загрузить в dom svg файлы а потом с ними работать? |
В том то и дело что не знаю с чего начать..
Пробовал так.. document.getElementById('svg_right_line').addEventListener('load',function(){ anim_right_line() } ) но тогда при загрузки svg сразу начинает выполнять анимация..а мне надо чтобы анимация была при клике мышкой |
.... onload="this.onclick()" ..... объекту
ну или кто там ловит второй онклик? ![]() |
Цитата:
Вот сама функция анимации function anim_obj_new(to,duration,obj_ids,svg_elem_id,prop,propf){ var to=to; var duration=duration; var start=new Date().getTime() setTimeout(function(){ var now=new Date().getTime()-start; var progress=now/duration; var result=Math.floor(to*progress); var obj_id=parent.document.getElementById(obj_ids); var obj=obj_id.contentDocument.getElementById(svg_elem_id); obj.setAttribute('stroke-dasharray',result+' '+ to); if(result==prop){ propf() } if(progress<1){ setTimeout(arguments.callee); } },10); } Ниже основная функция,которая вызывается в самом файле svg( родитель - <object id='svg_i_am'>--) __________________________________ function anim_right_line(){ /*Здесь вызывается функция анимации с параметрами*/ anim_obj_new(300,3000,'svg_right_line','line1',300,proper) /*Здесь задаются условия для отображения других элементов svg и дива*/ var obj=parent.document.getElementById('line1_size'); var div_display=parent.document.getElementById('education'); var div_bottom_line=parent.document.getElementById('line2_size'); if(obj.style.width<1){ div_display.style.display='none'; div_bottom_line.style.display='none' } obj.style.display='block'; /*функция которая указывается в параметре функции anim_obj_new*/ function proper(){ div_display.style.display='block'; if(div_display.style.display=='block'){ div_bottom_line.style.display='block' /*Здесь также вызывается функция анимации с параметрами для другой линии*/ anim_obj_new(300,3000,'svg_down_line','line2'); } } } а вот собственно сама часть svg где происходит вызов анимации при клике <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300" height="300" id="svg2985" onclick='anim_right_line()' > Как я понимаю тут дело не функции(хотя может и ошибаюсь..) Я не знаю как сделать чтобы все svg которые есть в тегах object были подгружены при загрузки страницы..просто загружены..и все. |
Часовой пояс GMT +3, время: 00:19. |