2017-09-18 18 views
0

morphMeアニメーションが終了した後、テキスト(CLICK ME)が0.5秒後に再び表示されるはずです。 (終了タグ以外のコードの最後の行を参照してください)SVGセットのattributeName = "visibility"は最初に動作しますが、それ以降ではありません

アニメーションが初めて終了したときにテキストが表示されるようにしても問題ありません。しかし、それ以降はそれは機能しません。私はなぜそれが一度しか働かないのか理解できません。

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 

<svg width="300" height="300" viewBox="0 0 300 300"> 
<defs> 
    <text id="startText" >CLICK ANYWHERE</text> 
</defs> 

<rect id="startMe" x="0" y="0" width="300" height="300" fill= "red"> </rect> 

<g transform="translate(50, 50)"> 
<path d="M 100,0 200,200 0,200 50,100 z;" fill="green" stroke="black" stroke-linecap="round" stroke-width="32" stroke-linejoin="round" stroke-dasharray="68"> 

<animate id="morphMe" 
restart="always" 
begin="startMe.click;startText.click;click;" 
attributeName="d" 
dur="2s" 
calcmode="spline" 
repeatCount="2" 
values= 
"M 100,0 200,200 0,200 50,100 z ; 
M 200,0 200,200 0,200 00,0 z ; 
M 200,200 0,200 0,0 200,0 z ; 
M 200,0 200,200 0,200 00,0 z ; 
M 100,0 200,200 0,200 50,100 z:" 
keyTimes="0; .25; .5; .75; 1" 
keySplines="1 0 1 1; 1 0 1 1; 1 0 1 1; 1 0 1 1;" 
fill="freeze" 
/> 
</path> 
</g> 
<g> 
    <use xlink:href="#startText" x="150" y="160" style="font-size: 18pt; fill: white; stroke: none; font-family: Rockwell; text-anchor: middle;"/> 
    <set attributeName="visibility" attributeType="CSS" to="hidden" begin="morphMe.begin"/> 
    <set attributeName="visibility" attributeType="CSS" to="visible" begin="morphMe.end+.5s"/> 

</g> 
</svg 

答えて

0

2つの問題があるようです。

  • セミコロンは、私はおそらくもしたい先頭の0(クロームはこれを強制することはありませんが)

で開始する必要があります

  • フラクショナル時間オフセットSMILアニメーションでコロンとしてタイプミスされています単にテキストと形状のポインタイベント:なしを作成します。なぜなら、それらのクリックを管理する必要がなく、rectのクリックだけを処理するからです。私もその変更を以下にしました。

    その後、すべてがうまくいくように見えます(少なくとも私がテストしているところではFirefox上で)。

    <?xml version="1.0" encoding="utf-8"?> 
     
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
     
    
     
    <svg width="300" height="300" viewBox="0 0 300 300"> 
     
    <defs> 
     
        <text id="startText" pointer-events="none">CLICK ANYWHERE</text> 
     
    </defs> 
     
    
     
    <rect id="startMe" x="0" y="0" width="300" height="300" fill= "red"> </rect> 
     
    
     
    <g transform="translate(50, 50)" pointer-events="none"> 
     
    <path d="M 100,0 200,200 0,200 50,100 z;" fill="green" stroke="black" stroke-linecap="round" stroke-width="32" stroke-linejoin="round" stroke-dasharray="68"> 
     
    
     
    <animate id="morphMe" 
     
    restart="always" 
     
    begin="startMe.click" 
     
    attributeName="d" 
     
    dur="2s" 
     
    calcmode="spline" 
     
    repeatCount="2" 
     
    values= 
     
    "M 100,0 200,200 0,200 50,100 z ; 
     
    M 200,0 200,200 0,200 00,0 z ; 
     
    M 200,200 0,200 0,0 200,0 z ; 
     
    M 200,0 200,200 0,200 00,0 z ; 
     
    M 100,0 200,200 0,200 50,100 z;" 
     
    keyTimes="0; .25; .5; .75; 1" 
     
    keySplines="1 0 1 1; 1 0 1 1; 1 0 1 1; 1 0 1 1;" 
     
    fill="freeze" 
     
    /> 
     
    </path> 
     
    </g> 
     
    <g> 
     
        <use xlink:href="#startText" x="150" y="160" style="font-size: 18pt; fill: white; stroke: none; font-family: Rockwell; text-anchor: middle;"/> 
     
        <set attributeName="visibility" attributeType="CSS" to="hidden" begin="morphMe.begin"/> 
     
        <set attributeName="visibility" attributeType="CSS" to="visible" begin="morphMe.end+0.5s"/> 
     
    
     
    </g> 
     
    </svg

  • +0

    ポインタのイベントオブジェクトには、私がこれまでに研究されてきたものを超えている(私は初心者の浅瀬ではまだです。)私はそれに見ていきます。あなたの変更は、Firefoxで私のために働いています(ありがとう!)まだクロムで同じ動作をしています:テキストはアニメーションを通して最初から再現されますが、後続のアニメーションの実行後に戻ってくることはありません。これはSVGのサポートが非常に不均一で、構文に間違いがないと思われるので、かなり残念です。私はまだ少しでも違法なことをやっている可能性があるという点にいる。 – darrellart

    +0

    あなたはChromeのバグを見つけました。私の答えには構文に間違いがありません。ここでChromeのバグを報告することができます:https://crbug.com/wizard –

    +0

    私のコードを見直してくれてありがとうございます。 – darrellart

    関連する問題