2017-02-04 3 views
0

Я новичок в анимации svg и ничего не знаю о языках кода. Кроме того, я уверен, что мой вопрос такой же глупый, как и может быть, но здесь я все равно: у меня есть круг на панели, и я бы хотел, чтобы этот круг перемещался слева направо на панели, когда я нажимаю и затем переместить его обратно в исходное положение с помощью другого щелчка. Это что-то я могу сделать? Мне удалось сделать первую анимацию с использованием SMIL (анимация), но я не могу получить вторую анимацию. Я предоставляю свой Html-код (я использую Inkscape, кстати). Спасибо за любой ответ!Могу ли я использовать щелчок, чтобы сделать две анимации? (svg animation)

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
 
<!-- Created with Inkscape (http://www.inkscape.org/) --> 
 

 
<svg 
 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
 
    xmlns:cc="http://creativecommons.org/ns#" 
 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
 
    xmlns:svg="http://www.w3.org/2000/svg" 
 
    xmlns="http://www.w3.org/2000/svg" 
 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
 
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 
 
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 
 
    width="1052.3622" 
 
    height="744.09448" 
 
    id="svg2" 
 
    version="1.1" 
 
    inkscape:version="0.48.5 r10040" 
 
    sodipodi:docname="switch.svg"> 
 
    <sodipodi:namedview 
 
    id="base" 
 
    pagecolor="#ffffff" 
 
    bordercolor="#666666" 
 
    borderopacity="1.0" 
 
    inkscape:pageopacity="0.0" 
 
    inkscape:pageshadow="2" 
 
    inkscape:zoom="2.8" 
 
    inkscape:cx="220.45194" 
 
    inkscape:cy="418.19862" 
 
    inkscape:document-units="mm" 
 
    inkscape:current-layer="layer1" 
 
    showgrid="true" 
 
    units="mm" 
 
    inkscape:window-width="1366" 
 
    inkscape:window-height="705" 
 
    inkscape:window-x="-8" 
 
    inkscape:window-y="-8" 
 
    inkscape:window-maximized="1"> 
 
    <inkscape:grid 
 
     snapvisiblegridlinesonly="true" 
 
     enabled="true" 
 
     visible="true" 
 
     empspacing="5" 
 
     id="grid3050" 
 
     type="xygrid" /> 
 
    </sodipodi:namedview> 
 
    <script 
 
    type="text/javascript" 
 
    id="inkwebjs"> 
 
</script> 
 
    <defs 
 
    id="defs4" /> 
 
    <metadata 
 
    id="metadata7"> 
 
    <rdf:RDF> 
 
     <cc:Work 
 
     rdf:about=""> 
 
     <dc:format>image/svg+xml</dc:format> 
 
     <dc:type 
 
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 
 
     <dc:title /> 
 
     </cc:Work> 
 
    </rdf:RDF> 
 
    </metadata> 
 
    <g 
 
    transform="translate(0,-308.2677)" 
 
    id="layer1" 
 
    inkscape:groupmode="layer" 
 
    inkscape:label="Layer 1"> 
 
    <path 
 
     sodipodi:nodetypes="csccscc" 
 
     inkscape:connector-curvature="0" 
 
     id="bar" 
 
     d="m 265,309.09448 c 0,0 -15,0 -15,15 0,15 15,15 15,15 l 65,0 c 0,0 15,0 15,-15 0,-15 -15,-15 -15,-15 z" 
 
     style="fill:#999999;stroke:#000000;stroke-width:1.06299213;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" 
 
     transform="translate(0,308.2677)" /> 
 
    <path 
 
     transform="matrix(0.8,0,0,0.8,46,373.08659)" 
 
     d="m 280,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
     sodipodi:ry="25" 
 
     sodipodi:rx="25" 
 
     sodipodi:cy="324.09448" 
 
     sodipodi:cx="255" 
 
     id="switch" 
 
     style="fill:#999999;fill-opacity:1;stroke:#000000;stroke-width:1.32874016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" 
 
     sodipodi:type="arc" /> 
 
    </g> 
 
\t <animate 
 
\t \t id="switch_anim" 
 
\t \t to="m 380,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
\t \t from="m 280,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
\t \t dur="0.3s" 
 
\t \t begin="click" 
 
\t \t end="reverse_switch_anim.begin" 
 
\t \t attributeName="d" 
 
\t \t fill="freeze" \t 
 
\t \t xlink:href="#switch"/>

ответ

0

Вы можете это сделать, если вы обманываете, есть два (или более) объектов и переключаться между ними. Если они выглядят одинаково, никто никогда не узнает, что они не являются фактически одним и тем же объектом.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
 
<!-- Created with Inkscape (http://www.inkscape.org/) --> 
 

 
<svg 
 
    width="1052.3622" 
 
    height="744.09448"> 
 
    <g 
 
    transform="translate(0,-308.2677)" 
 
    id="layer1"> 
 
    <path 
 
     id="bar" 
 
     d="m 265,309.09448 c 0,0 -15,0 -15,15 0,15 15,15 15,15 l 65,0 c 0,0 15,0 15,-15 0,-15 -15,-15 -15,-15 z" 
 
     style="fill:#999999;stroke:#000000;stroke-width:1.06299213;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" 
 
     transform="translate(0,308.2677)" /> 
 
    <path 
 
     transform="matrix(0.8,0,0,0.8,46,373.08659)" 
 
     d="m 280,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
     id="switch" 
 
     style="fill:#999999;stroke:#000000;stroke-width:1.32874016;" /> 
 
    <path 
 
     transform="matrix(0.8,0,0,0.8,46,373.08659)" 
 
     d="m 380,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
     id="switch2" 
 
     style="fill:#999999;stroke:#000000;stroke-width:1.32874016;display:none;" /> 
 
    </g> 
 
\t <animate 
 
\t \t id="switch_anim" 
 
\t \t to="m 380,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
\t \t from="m 280,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
\t \t dur="0.3s" 
 
\t \t begin="click" 
 
\t \t attributeName="d" 
 
\t \t fill="remove" \t 
 
\t \t xlink:href="#switch"/> 
 
\t <set 
 
\t \t begin="switch_anim.end" 
 
\t \t attributeName="display" 
 
     to="none" 
 
\t \t fill="freeze" \t 
 
\t \t xlink:href="#switch"/> 
 
\t <set 
 
\t \t begin="switch_anim.end" 
 
\t \t attributeName="display" 
 
     to="block" 
 
\t \t fill="freeze" \t 
 
\t \t xlink:href="#switch2"/> 
 
\t <animate 
 
\t \t id="switch2_anim" 
 
\t \t from="m 380,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
\t \t to="m 280,324.09448 c 0,13.80712 -11.19288,25 -25,25 -13.80712,0 -25,-11.19288 -25,-25 0,-13.80712 11.19288,-25 25,-25 13.80712,0 25,11.19288 25,25 z" 
 
\t \t dur="0.3s" 
 
\t \t begin="click" 
 
\t \t attributeName="d" 
 
\t \t fill="remove" \t 
 
\t \t xlink:href="#switch2"/> 
 
\t <set 
 
\t \t begin="switch2_anim.end" 
 
\t \t attributeName="display" 
 
     to="none" 
 
\t \t fill="freeze" \t 
 
\t \t xlink:href="#switch2"/> 
 
\t <set 
 
\t \t begin="switch2_anim.end" 
 
\t \t attributeName="display" 
 
     to="block" 
 
\t \t fill="freeze" \t 
 
\t \t xlink:href="#switch"/> 
 
</svg>

+0

Огромное спасибо Роберту! Это именно то, что мне нужно! Я заметил, что я могу запустить анимацию, которую вы сделали в первый раз правильно, но тогда мой браузер (Chrome) не может сделать это в другое время. Вы знаете, почему это происходит? Могу ли я повторить анимацию в любое время, когда я нажму на нее правильно? – pablobs88

+0

Firefox работает, поэтому я предполагаю, что это ошибка Chrome. Вы можете попытаться сообщить об этом [их bugtracker] (https://bugs.chromium.org/p/chromium/issues/list) –

+0

Еще раз большое спасибо Роберту. Я сообщил об этом. Я надеюсь, что кто-то найдет для него решение. – pablobs88