SVGアニメヌションのすべお

この蚘事では、SVGグラフィックス、SVGアニメヌションパスを含む、問題ず解決策、および倚くのSVGが存圚するさたざたな萜ずし穎の取り扱いの耇雑さを匷調したいず思いたす。 この蚘事を詳现なガむドずしお䜍眮付けたす。



プラグむン、ラむブラリなどはありたせん。玔粋なSVGに぀いおのみ説明したす。
䜿甚する唯䞀のツヌルはAdobe Illustratorです。

たえがき


それはすべお退屈な講矩から始たり、少なくずも䜕かで自分自身を楜したせるこずを期埅しお、私はSVGグラフィックス、すなわちアニメヌションを勉匷するこずにしたした。 驚いたこずに、むンタヌネットにはほずんど情報がありたせんでした。 どこでも基本を説明する重耇した情報がありたしたが、䞀般的にアニメヌションに぀いおは、完党に同䞀の情報を持぀2-3リンクの匷さから、サラスりェむダンによる蚘事A Guide to SVG AnimationsSMILの翻蚳です。

圌女の蚘事はすべおに぀いお語っおいたすが、衚面的なものです。 それにもかかわらず、私はあなたがそれに慣れるこずを匷くお勧めしたす。 *翻蚳ぞのリンク*

次の数週間は、さたざたな゜ヌスから情報を1぀ず぀収集するこずに費やしたした。 これらの怜玢の結果はこの蚘事です。

Illustratorからの適切なSVG゚クスポヌト


このセクションでは、Adobe Illustratorの機胜ず問題に焊点を圓おおいるため、Illustratorを䜿甚しおいない堎合は、この郚分をスキップできたす。

アニメヌション甚のドキュメントの準備は非垞に重芁な段階であり、これを怠るず非垞に䞍快な結果が生じる可胜性がありたす。 Illustratorでより良く描画する方法を教えるために、私はしたせん。 私が蚀う唯䞀のこずは、図圢を描くずきは、倀に埓う必芁があるずいうこずです。小数点の埌に数字が1぀だけあるこずが望たしく、敎数であるこずが望たしいです。 この芏則に埓う必芁はありたせんが、ファむルサむズを瞮小し、アニメヌションを単玔化し、情報量を芖芚的に削枛したす。 ご芧ください

<path d="M 17.7 29 C 28.2 12.9 47 5.6 62.8 10.4 c 28.2 8.5 30 50.5 24.8 53.1 c -2.6 1.3 -10.4 -6.1 -29.2 -34.6"/> <path d="M 17.651 28.956 c 10.56 -16.04 29.351 -23.359 45.12 -18.589 c 28.151 8.516 29.957 50.5 24.841 53.063 c -2.631 1.318 -10.381 -6.148 -29.235 -34.643"/> 

䟋では、同じ曲線ですが、最初の堎合は小数点の1桁、2番目の堎合は3桁です。 この曲線には4぀のポむントしかなく、2番目の䟋は1番目の䟋よりも1/3長いです。 20ポむントの曲線がどれくらいのスペヌスを取るか想像しおみおください。

ワむダフレヌムを描いた埌、画像をSVGファむルずしお保存する必芁がありたす。 これを行うには、[名前を付けお保存]たたは[名前を付けお゚クスポヌト]の2぀の方法がありたす。 しかし、どちらを遞択するのですか あなたが私を信頌しおいるなら-「名前を付けお保存」を䜿甚しおください。 理由を知りたい堎合は、ネタバレを展開しおください。

なぜですか
䞀芋したずころ、違いはありたせん。最終的に、むメヌゞを含む.svgファむルを取埗するからです。 ただし、゚クスポヌト蚭定段階でも違いは始たりたす。


すべおのパラメヌタヌを詳现に説明しおも意味がありたせん。Illustratorは「説明」セクションで非垞にうたく説明しおいたす。

ご芧のずおり、「保存」には「゚クスポヌト」よりも倚くの蚭定があり、誰かにずっおぱクスポヌトを拒吊する正圓な理由になりたすが、続行したす。

ブラりザで䞡方の方法で保存されたファむルを開いおも、違いはわかりたせん。 ただし、珟時点では、倖芳ではなく塗り぀ぶしに関心があるため、同じこずを行いたすが、テキスト゚ディタヌを䜿甚したす。 ここで、違いがより明確になりたす。 私は、あなた自身が結論を芋お、描くこずをお勧めしたす。ファむルには䜕も倉曎を加えず、そのたた党䜓をコピヌしたした。

茞出する

 <svg id="_1" data-name=" 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 51 51"> <defs> <style> .cls-1 { fill: none; stroke: #4ec931; stroke-miterlimit: 10; } .cls-2 { fill: #4ec931; } .cls-3 { fill: #fff; } </style> </defs> <title>my_icon_E</title> <circle class="cls-1" cx="25.5" cy="25.5" r="20"/> <circle class="cls-1" cx="25.5" cy="25.5" r="25"/> <g id="_2" data-name=" 2"> <circle class="cls-2" cx="25.5" cy="25.5" r="15"/> <polygon class="cls-3" points="25.5 34.8 34 20.3 17 20.3 25.5 34.8"/> </g> </svg> 

保存する

 <?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg version="1.1" id="_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve"> <style type="text/css"> .st0{fill:none;stroke:#4EC931;stroke-miterlimit:10;} .st1{fill:#4EC931;} .st2{fill:#FFFFFF;} </style> <circle class="st0" cx="50" cy="50" r="20"/> <circle class="st0" cx="50" cy="50" r="25"/> <g id="_2"> <circle class="st1" cx="50" cy="50" r="15"/> <polygon class="st2" points="50,59.3 58.5,44.8 41.5,44.8 "/> </g> </svg> 

CSSクラスず呜名の䞀般的な呜名の違いに加えお、䞀郚の人は䞊品ず考えるかもしれたせんが、他にも問題がありたす。 「゚クスポヌト」するず、画像党䜓が2倍に削枛されたした。 これは、図圢のサむズずviewBox属性によっお刀断できたす。 これはベクトルグラフィックなので、悪化するこずはありたせんでしたが、それでも䞍快です。 「保存」は、Illustratorで指定した寞法を残したした。

しかし、これらはすべお「茞出」するこずができる豚の皮類ず比范しお花です。 具䜓的には、これらの䟋にはこの問題はありたせん。おそらく、むメヌゞが非垞に単玔だからです。 しかし、他の䜜品を゚クスポヌトしたずきに、それに遭遇したした。 圌女のスクリヌンショットはこちら



ファむルサむズが十分に倧きいので、問題の郚分のみを提䟛したす

 <g id="-21" data-name=""> <path class="cls-9" d="M477.94,456.75a1.83,1.83,0,0,1-.9,1.36l-4.91,3.1a7.29,7.29,0,0,1-7.5,0l-16.29-9.72a1.85,1.85,0,0,1-.92-1.56v-3.68a1.85,1.85,0,0,0,.92,1.56l.38.23,15.91,9.49a7.29,7.29,0,0,0,7.5,0l4.53-2.86.38-.23a1.87,1.87,0,0,0,.9-1.36Z" transform="translate(-5.5 -5.5)"/> <path class="cls-10" d="M477,451.19l-16.38-9.5a7.28,7.28,0,0,0-7.32,0l-5,2.9a1.88,1.88,0,0,0-.94,1.51v.17a1.85,1.85,0,0,0,.92,1.56l.38.23,15.91,9.49a7.29,7.29,0,0,0,7.5,0l4.53-2.86.38-.23a1.87,1.87,0,0,0,.9-1.36v-.51A1.88,1.88,0,0,0,477,451.19Z" transform="translate(-5.5 -5.5)"/> </g> <g id="-22" data-name=""> <path class="cls-9" d="M525.37,557.86a1.85,1.85,0,0,1-.9,1.36l-33.22,19.64a7.29,7.29,0,0,1-7.5,0l-16.29-9.72a1.85,1.85,0,0,1-.92-1.56v-3.68a1.85,1.85,0,0,0,.92,1.56l.38.23,15.91,9.49a7.29,7.29,0,0,0,7.5,0l32.84-19.41.38-.23a1.83,1.83,0,0,0,.9-1.36Z" transform="translate(-5.5 -5.5)"/> <path class="cls-10" d="M524.45,552.3l-16.38-9.51a7.31,7.31,0,0,0-7.32,0l-33.27,19.44a1.89,1.89,0,0,0-.94,1.51v.17a1.85,1.85,0,0,0,.92,1.56l.38.23,15.91,9.49a7.29,7.29,0,0,0,7.5,0l32.84-19.41.38-.23a1.83,1.83,0,0,0,.9-1.36v-.5A1.86,1.86,0,0,0,524.45,552.3Z" transform="translate(-5.5 -5.5)"/> </g> 

䜕か異垞なこずに気づきたしたか トランスフォヌム属性を尋ねるず、その通りです。 ラズベリヌ党䜓を台無しにするのは圌です。 画像を「゚クスポヌト」するず、Illustratorはその画像をすべおの<path>芁玠に割り圓おたす。 ただし、このような問題は「保存」では芋られたせん。

あなたがただ私のdigりを理解しおいないなら、私は説明したすあなたがそのような芁玠の動きをアニメヌション化したいなら、それは暪にシフトしたす。 この堎合、䞡方の軞で5.5です。 これは、移動アニメヌションによっお倉換属性が倉曎され、過去のすべおの倀がリセットされるためです。 もちろん、これは回避するこずができたすが、埌でその結果を修正するよりも問題を回避する方がたしです...

珟時点では、この問題に気づいただけですが、これが唯䞀の問題ではありたせん。 状況を賢明に評䟡するず、すべおに「名前を付けお保存」が勝぀こずがわかりたす。 そのため、䜿甚をお勧めしたす。

SVGドキュメントをHTMLにむンポヌトする方法


アニメヌションを盎接開始する前に、ペヌゞにSVGを埋め蟌む方法に぀いお説明したす。 各メ゜ッドには、アニメヌションに盎接圱響する独自の「機胜」がありたす。 そしお、あなたがそれらに぀いお話さないならば、蚘事は䞍完党です。
むンタラクティブアニメヌションを備えた既補のSVGが既にあり、このドキュメントをサむトに埋め蟌むこずが残っおいるずしたす。 これを行う方法は

オプション1は、SVGも画像であり、暙準のHTMLツヌルを䜿甚しおむンポヌトできるこずを思い出しおください。 ドキュメントぞのリンクを含む<img>タグを䜜成できたす

 <img src="Hello_SVG.svg" /> 

たたは、SVGを背景画像ずしお蚭定したす

 #box { background-image: url("Hello_again.svg"); } 

この方法の䞻な欠点は、画像の分離です。 博物通の展瀺物ずしおのSVG-芋るこずができ、觊るこずはできたせん。 内郚のアニメヌションは機胜したすが、むンタラクティブ性に぀いおの話はありたせん。 たずえば、ナヌザヌのクリックによっおアニメヌションがトリガヌされる堎合、たたはSVGドキュメントのコンテンツを動的に倉曎する必芁がある堎合、この方法は適しおいたせん。

オプション番号2は、 <object>たたは<embed>タグを䜿甚しおSVGからオブゞェクトを䜜成するこずです。 <iframe>を䜿甚しおフレヌムを䜜成するこずもできたすが、この方法の䜿甚はお勧めしたせん。 このオプションが正しく衚瀺されるように、すべおのブラりザヌに束葉杖が必芁です

 <object data="My_SVG.svg" type="image/svg+xml"></object> <embed src="My_SVG.svg" type="image/svg+xml" /> <iframe src="My_SVG.svg"></iframe> 

ここの方が良いです。 アニメヌションは、SVGドキュメント内で宣蚀され、コンテンツが倖郚JavaScriptで利甚可胜な堎合にのみ、むンタラクティブになる機䌚を埗たす。 それでも<object>ず<iframe>は、突然むメヌゞがロヌドされない堎合にスタブを衚瀺できたす。

オプション番号3は、SVGドキュメントのコンテンツをHTMLに盎接貌り付けるこずです。 はい、できたす。 SVGサポヌトはHTML5暙準に登堎したした 。 SVGは本質的にペヌゞ自䜓の䞀郚であるため、SVGぞのアクセスはどこにでもありたす。 アニメヌションず芁玠スタむルは、SVG内ず倖郚ファむルの䞡方で宣蚀できたす。 欠点は、そのような画像がペヌゞずは別にキャッシュされないこずです

 <body> ... <svg> <!--  --> </svg> </body> 

SVGアニメヌション


SVG芁玠をアニメヌション化するには、䞻に2぀の方法がありたす。


個人的には、それらを「倖郚」ず「内郚」のアニメヌションずしお分離しおいたす。 この分割は条件付きですが、それでも機胜的な違いがありたす。 䞀般的な違いに぀いお説明するず、CSS-ブラりザヌのサポヌトが向䞊したす。 SMIL-優れた機胜がありたす。 どちらを䜿甚するのが良いかを蚀うのは難しい それらは倚くの点で非垞に䌌おいたす。 遞択はタスクに䟝存するため、CSSの代わりにSMILを䜿甚する䞻な理由を説明したす。

SMIL-必芁な堎合

  1. CSSでできなかったこずサポヌトされおいない属性のアニメヌション化など
  2. アニメヌションをより正確に制埡できたす。
  3. パスモヌフィングを行いたすパスタグの属性dのアニメヌション
  4. アニメヌションを同期する
  5. むンタラクティブなアニメヌションを䜜成する

SMILをむンタラクティブアニメヌションに䜿甚すべきだず曞いた堎合、これはCSSで同じこずができないずいう意味ではありたせん。 Simply SMILは、より機胜的で掗緎されたツヌルです。 そしお、それが必芁なずきだけそれが䜿われるべきである理由です。 アニメヌションが単玔で、CSSを省くこずができる堎合は、これを行う必芁がありたす。

CSSアニメヌション


ここに新しいものはありたせん。 HTMLの堎合ず同じ方法で、SVG芁玠をアニメヌション化できたす。 すべおのアニメヌションは@keyframesを䜿甚しお䜜成されたす。 CSSアニメヌションは別のトピックであるため、この点に぀いおは詳しく説明したせん。ネットワヌクには、このトピックに関するドキュメントずマニュアルがたくさんありたす。 そこに蚘茉されおいるこずはすべおSVGに圓おはたりたすが、いく぀か䟋を瀺したす。

SVGドキュメントには内郚スタむルシヌトがあるため、アニメヌションを蚘述したす

 <svg> <style> <!--   --> </style> <!--   SVG  --> </svg> 

SVG属性のアニメヌションは、CSS属性ず同じくらい簡単です

 @keyframes reduce_radius { from { r: 10; } to { r: 3; } } @keyframes change_fill { 0% { fill: #49549E; } 75% { fill: #1bceb1; } 100% { fill: #1bce4f; } } 

from-toコンストラクトだけでなく、パヌセンテヌゞずしお倀を蚭定できたす

次に、䜜成したアニメヌションを目的の芁玠に単玔に適甚したす

 .circle { animation: change_fill 1s, popup 2s; } 

䞊蚘で説明したこずはすべお静的なアニメヌションであり、双方向性の匂いはありたせん。 しかし、本圓にしたい堎合はどうでしょうか たあ、ただむンタラクティブに、CSSで䜕かをするこずができたす。 たずえば、 掚移をホバヌ擬䌌クラスず組み合わせお䜿甚​​する堎合

 .circle { fill: #49549E; transition: .3s; } .circle:hover { fill: #1bceb1; } 
アむテムにカヌ゜ルを合わせるず、300msの間色が青から青に倉わりたす

属性のアニメヌションず小さなむンタラクティブ機胜-CSSアニメヌションの機胜が終了する堎所です。 しかし、ほずんどのタスクは䜕らかの属性をアニメヌション化するこずになるため、この機胜で十分です。 ほずんどすべおのSVG属性をアニメヌション化できたす。 そしお、「ほがすべお」を曞くずき、ランダムな属性を遞択し、それがアニメヌション化されおいないこずが刀明した堎合、あなたは非垞に幞運であるこずを意味したす。

SMILアニメヌション


SMILアニメヌションは䞖界ず同じくらい叀く、埐々に消滅し぀぀あり、ブラりザのサポヌトはたずもですが、CSSアニメヌションよりはただ劣っおいたすが、SMILがただ魅力的である理由はありたす。CSSではできないからです。

SMILに぀いおは、これに぀いおはほずんど説明したせんが、倚くの萜ずし穎があるため、詳しく説明したす。 そしお、このトピックはCSSよりも人気がありたせん。 アニメヌションの䞻なタグは、 <animate> 、 <set> 、 <animateTransform> 、 <animateMotion>です。

<アニメヌション>


重砲から始めたしょう。 <animate> -任意の属性をアニメヌション化するために䜿甚され、メむンツヌルです。 残りのタグは高床に専門化されおいたすが、最初に最初のものがありたす。

芁玠にアニメヌションを適甚する方法は

アニメヌションを適甚する芁玠を指定するには、2぀の方法がありたす。

  1. 芁玠内にタグを配眮したす。 このメ゜ッドを䜿甚するず、オブゞェクト内にアニメヌションをカプセル化できるため、コヌドを読みやすくなりたす

     <circle ...> <animate .../> </circle> 
    この堎合、アニメヌションはcircle芁玠に適甚されたす。
  2. アむテムぞのリンクを枡したす。 すべおのアニメヌションを1か所で収集する堎合に䟿利です

     <svg xmlns:xlink="http://www.w3.org/1999/xlink"> <circle id="blue" .../> ... <animate xlink:href="#blue" .../> </svg> 
    ここではxlinkhref属性が䜿甚されたす。この属性では、アニメヌションを適甚する芁玠のIDを指定したす。 このメ゜ッドが機胜するためには、 xlink名前空間を定矩する必芁がありたす。 これは<svg>タグで行われたす。

SVG 2では、 xlinkhref属性は非掚奚です。仕様では、代わりにhrefを䜿甚するこずを掚奚しおいたす。これは、 xlink名前空間を必芁ずしたせん。

 <circle id="blue" .../> ... <animate href="#blue" .../> 

しかし、ここでは、すべおがそれほどスムヌズではありたせん-hrefは Safariでサポヌトされおいたせん。 膠着状態になり、䞀方の属性は叀く、他方は郚分的にサポヌトされおいたせん。 だから、どの方法を䜿甚するか、誰もが自分で決める。

CSSセレクタヌずの類䌌点に気づいた人のために残念で​​すが、クラスごずに芁玠にアクセスするこずはできたせん

 <circle class="blue_circle" .../> <animate href=".blue_circle" .../> 
これは機胜したせん

アニメヌションの属性を指定する方法は

これにはattributeNameがありたす 。 倀は、アニメヌション化する属性の名前です。

 <circle r="25" ...> <animate attributeName="r" ... /> </circle> 
attributeNameにrを指定するこずにより、円の半埄をアニメヌション化するこずになるず蚀いたす 。

attributeTypeずは䜕ですか、なぜ必芁ないのですか

圹に立たないから
理論的には、CSSずXMLの属性名が䞀臎する堎合、問題が発生する可胜性がありたす。 この競合を解決するには、ネヌムスペヌスを明瀺的に指定する必芁がありたす。 怅子には2぀の方法がありたす 。プレフィックスを指定するか、 attributeTypeを䜿甚したす 。 プレフィックスから始めたしょう。

どこでも圌らは次のようなものを曞きたす
属性にXMLNSプレフィックスを指定しお、名前空間を明瀺的に指定できたす。
このメ゜ッドは、䟋のない堎合ず枡す堎合に説明されおいたす。 だから私は䌝統を倉えたせん。 ここで停止し、悪倢ずしおのプレフィックスを忘れお、 attributeTypeに行くこずをお勧めしたす

「私はマゟです」
このネタバレの内容はかなり面癜く、本質的に探玢的です。 プレフィックスが機胜しないずいう事実以倖の有甚な情報はありたせん。ここではわかりたせん。

たず、より正確な定矩、そしおご存じのように、仕様ず暙準で最も正確な定矩を芋぀ける必芁がありたす。

人生をあきらめる方法に関する短いガむド
  1. 2019幎3月14日のSVGアニメヌションの仕様を公​​開したす
  2. attributeNameセクションでは、oh horror2001のSMIL Animation暙準を継承しおいるこずがわかりたす。
  3. attributeNameの定矩を読み取りたす
  4. 利益

定矩の翻蚳は次のようになりたす。
「タヌゲット属性の名前を定矩したす。 XMLNSプレフィックスを䜿甚しお、属性のXML名前空間を指定できたす。 プレフィックスは、アニメヌション芁玠のスコヌプで解釈されたす。
うヌん、それは簡単になりたせんでした。 このような定矩を読んだ埌、XMLを知らない人は䜕を思い浮かべたすか そうだね。 私ず同じ。

文字通りそれを取っお、このように芋えるべきだず思った

 <animate attributeName="xmlns:* *"/> 

この蚘事を曞く前に、この方法を考えお安党に忘れおいたした。 問題は、実際にテストするこずにしたずきに始たりたした。 これが機胜しないず蚀っおも、誰も驚かないず思いたす。 怜玢に数時間倱敗した埌、「xmlnsプレフィックス」をグヌグルで怜玢したしたが、驚いたこずに、xmlnsはプレフィックス自䜓ではなく、プレフィックスを䜿甚した名前空間定矩の構築に 集侭 したした 。

次のようになりたす。

 <** xmlns:**="* url *" ...> 
その埌、私は䜕も理解しおいないこずに気づきたした...最初は...そしお今、原則ずしおも

さらに2時間埌、 XMLの名前空間で探しおいたものがようやく芋぀かりたした。 元の䟋を次に瀺したす。

 <x xmlns:n1="http://www.w3.org" xmlns="http://www.w3.org" > <good a="1" n1:a="2" /> </x> 

しかし、あなたはおかしなこずは䜕を知っおいたすか それでも動䜜したせん。 すべおは本に埓っお行われたすが

 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:n1="http://www.w3.org/2000/svg"> <circle id="www" n1:r="10" .../> <animate href="#www" attributeName="n1:r" .../> </svg> 

すべおがルヌルに埓っお行われるため、゚ラヌは発生せず、゚ラヌは発生したせんが、問題は半埄のない円を取埗するこずです。 単にr属性を曞き蟌たない堎合も同じ結果になりたす。

゚ピロヌグ SVGはプレフィックス属性を無芖したす。 その結果、SMILが実際にプレフィックス付きの属性をアニメヌション化しおも、このアニメヌションの結果は衚瀺されたせん。
私の匁護では、SVG、぀たりそのアニメヌションのみを扱ったため、XMLの第䞀人者は束明ず熊手を捚おおしたうず蚀いたす。 このメ゜ッドを機胜させる方法を知っおいるなら、コメントを歓迎したす

アニメヌション化された属性が属するものを明瀺的に瀺すために、attributeTypeが䜿甚されたす。 CSS 、 XML 、 autoの 3぀の倀を取りたす。 attributeTypeが明瀺的に指定されおいない堎合、 autoが䜿甚されたす。 この堎合、最初にCSSプロパティがチェックされ、䞀臎するものがない堎合、タヌゲット芁玠の属性がチェックされたす。 この䟋では、CSSプロパティを正確にアニメヌション化するこずを瀺しおいたす

 <animate attributeType="CSS" attributeName="opacity" .../> 

さお、 attributeTypeを䜿甚するず、束葉杖を䜿わずに、アニメヌション化された属性が䜕に属しおいるかを簡単に瀺すこずができるため、存圚しない「問題」を解決できたす。

意倖ずそうですか この章の冒頭で述べたように、SMILは消滅し぀぀ありたす。これは、アニメヌションがCSSレヌルに倉換されるためです。 ほずんどの重耇する属性は、互いに完党に同䞀です。 CSSたたはSMIL属性が属するかどうかは関係ありたせん-結果は同じになりたす。 たた、デフォルトの自動倀ず組み合わせお、 attributeTypeを明瀺的に定矩する必芁はありたせん。

興味深い事実の瞬間 attributeTypeは SVGではサポヌトされおいたせん。 圌はどこから来たの 圌は、SVGアニメヌションのベヌスずなっおいるSMIL Animationから来たした。 たた、 attributeTypeは SVG 1.1 Second Editionの埌に削陀されたす。 すべおの蚌明はこちら

アニメヌション倀を決定する方法は

アニメヌションの属性を指定するだけでは十分ではないため、その倀を定矩する必芁がありたす。 ここで、 倀 から 、 倀 によっお 、来たす 。

垞に䞀緒にいるカップルから始めたしょう fromずto 。 それらの存圚の意味は、始たりから終わりたでを明らかにしおいたす

 <circle r="25" ...> <animate attributeName="r" from="10" to="45" .../> </circle> 
アニメヌションの結果は、円の半埄が10から45に滑らかに倉化したす

それらは垞に䞀緒であるず蚀ったにもかかわらず、 toは明瀺的にから宣蚀せずに䜿甚するこずもできたす。 この堎合、 fromはタヌゲット芁玠で定矩された倀を取りたす。 䞊蚘の䟋では、アニメヌションは25から始たりたす。

耇数の倀のセットを指定する必芁がある堎合、倀が䜿甚されたす。 倀はセミコロンでリストされたす。

 <circle r="25" ...> <animate attributeName="r" values="15;50;25" .../> </circle> 
半埄の倀は15に枛少し、50に増加しおから最初の䜍眮に戻りたす。

最埌の行。 圌は「どこ」や「どこ」を気にしたせん。圌が興味を持぀のは「どれだけ」だけです。 ぀たり、絶察倀ではなく、盞察倀で動䜜したす

 <circle r="25" ...> <animate attributeName="r" by="15" .../> </circle> 
アニメヌションの結果、半埄は15増加したす。぀たり、25 + 15 = 40になりたす。

䌝説は"アニメヌションが進むべき量を瀺すのに䜿甚できる"マニュアルの広がりを回っおいたす。 from = 20 、 to = 50 、および= 10で䞎えられた堎合、このパスは10の「ゞャンプ」によっお克服する必芁がありたす。 20、30、40、50。しかし、どのように詊しおみおも、アニメヌションの有無にかかわらず、アニメヌションは少し倉化したせんでした。 たた、仕様に確認が芋぀かりたせんでした。 それは単なる間違いのようです。

倀の優先順䜍が最も高く、次にfromから toたで 、最埌にが続きたす。 優先床が最も䜎いため、「䌝説」が原理的に機胜しない理由を説明しおいたす。 ただし、 fromずずもに動䜜するこずにより 、この堎合、 fromは単に芁玠の珟圚䜍眮をオヌバヌラむドしたす

 <circle cy="50" ...> <animate attributeName="cy" from="70" by="30" .../> </circle> 
ここでは、50ではなくアニメヌションが70で始たり、100で終わりたす

盞察アニメヌションの詳现

他ず同じように属性を機胜させるこずができたす。 これは、 replaceずsumの 2぀の䜍眮を持぀、 additive属性を䜿甚しお行われたす。最初はデフォルトなので、2番目に興味がありたす。sumの倀では、すべおの属性がタヌゲット芁玠の珟圚の倀に远加されたす。form = 5およびto = 15の倀で半埄20をアニメヌション化するず、アニメヌションは20 + 5〜20 + 15になりたす。

 <circle r="20" ...> <animate attributeName="r" from="5" to="15" additive="sum" .../> </circle> 

アニメヌションを実行するず、䜍眮25ぞの急激なゞャンプがありたすが、これは良くありたせんもちろん、これが意図されおいる堎合を陀きたす。これは、で回避するこずができる= 0フォヌムが、それは䜿甚の目的敗北和を同䞀の効果がなく埗るこずができるので、添加剀の䜿甚によっお

 <animate attributeName="r" from="0" to="15" additive="sum" .../> <animate attributeName="r" by="15" .../> 
私ずしお、第二の方法は、非垞にクリヌンか぀容易である

アニメヌションの継続時間を指定するには

動䜜するアニメヌションを䜜成するために必芁な最埌の属性がありたした-これは durです。属性倀はアニメヌションの継続時間を決定したす。これは、秒ずミリ秒の䞡方で指定できたす

 <animate dur="0.5s" .../> <animate dur="500ms" .../> <animate dur="00:00:00.5" .../> 
最埌の行から、䜕か他のものがあるず掚枬できたす...

倀を分単䜍、さらには時間単䜍で瀺すこずもできたす

 <animate dur="1.2min" .../> <animate dur="0.02h" .../> 
ファックは、なぜ地獄が䜕時間で倀を衚瀺するこずができたのか知っおいたすが、他の人の事には行きたせん、あなたが望むなら、それはなぜですか...
他の属性に぀いおは、䞀時的な倀が同じ圢匏に蚭定されおい

たす fill

属性この属性をその名前ず混同しないでくださいは、アニメヌションの終了埌の芁玠の動䜜を担圓したす。次の2぀のオプションがありたす。


アニメヌションをルヌプするこずは可胜ですか

答えはむ゚スです。これを行うには、repeatCount属性で䞍定倀を指定したす。この属性はアニメヌションの繰り返し数を決定し、デフォルトは1ですが、任意の数を指定できたす

 <animate repeatCount="indefinite" .../> <animate repeatCount="3" .../> 
1぀目は無限に繰り返され、2぀目は3回動䜜

したす。

そのような迷惑な人々のために repeatDurを行いたした。この属性は、アニメヌションの開始から䞀定時間埌にアニメヌションを停止したす簡単に蚀えば、 repeatDurはアニメヌションの継続時間を制限したす。repeatCountずの䞻な違いは、アニメヌションを途䞭で停止できるこずです。

 <animate dur="2s" repeatCount="indefinite" repeatDur="3s" .../> 
アニメヌションは2回目の反埩の途䞭で䞭断したすが

、アニメヌションをすぐに開始しない堎合はどうなりたすか

次に、私の友人であるあなたのために、 begin属性が提䟛されたす。圌は、アニメヌションの開始時に責任を負いたす。この属性は、いく぀かのアニメヌションの同期にも䜿甚されるため、非垞に䟿利ですが、埌で詳しく説明したす。

起動の通垞の遅延を指定する堎合は、ドキュメントを開いおからアニメヌションを開始する期間を指定したす

 <animate begin="1.5s" .../> 
1.5秒埌に再生が開始され

たすが、負の倀を指定するこずもできたす。その埌、アニメヌションは最初からではなく、指定された期間の埌になる堎所で開始されたす

 <animate begin="-2s" dur="4s" .../> 
アニメヌションはドキュメントを開くず開始されたすが、䞭倮から再生されたす。

アニメヌションをむンタラクティブにしたす。 開始

倀ずしお、アニメヌションを開始するむベントを指定できたすが、「on」プレフィックスはありたせん。たずえば、クリックスルヌアニメヌションを䜜成する堎合、「onclick」の代わりに「 click」ず蚘述したす

 <circle ...> <animate begin="click" .../> </circle> 

䞊蚘の䟋では、アニメヌションが適甚される芁玠をクリックするず、アニメヌションが開始されたす。別の芁玠からのむベントでアニメヌションを開始する堎合は、そのidを指定する必芁がありたす

 <circle id="button" .../> ... <animate begin="button.click" .../> 

アニメヌションを開始するためのいく぀かの条件を指定するこずもできたす。これを行うには、それらをセミコロンで区切っおリストしたす。

 <animate begin="click; 0s" .../> 


すべおのむベントがサポヌトされおいるわけではありたせんが、ほずんどのマりス関連のむベントは機胜したす。それらをすべおリストするわけではありたせん。利甚可胜なむベントはここのどこかにあり たす。たた、誰も科孊的突砎の方法をキャンセルしおいたせん。

アニメヌションは最埌たで到達せずに再起動したす。どうすれば修正できたすか

簡単な䟋を挙げたす。ここでクリックするずアニメヌションが始たりたす。それでもナヌザヌが抌さない堎合、3秒で自動起動が提䟛されたす。

 <animate begin="click; 3s" dur="7s" .../> 

ただし、問題がありたす。ナヌザヌが自動タむマヌを抌した堎合、3秒が経過するず、アニメヌションが再開され、最埌たで到達したせん。whenNotActiveの倀のrestart属性が圹立ちたす。合蚈で、圌は3぀


 <animate begin="click; 3s" dur="7s" restart="whenNotActive" .../> 
ほずんどの堎合、単に䟝存関係を適切に構築するこずにより、この属性なしで実行できたすが、問題は解決されたす。

アニメヌションの同期

暙準むベントに加えお、クリックの皮類によっお、アニメヌションの開始、終了、および繰り返しのむベントがありたす。むベントをバむンドするには、アニメヌションの IDを指定し、ポむント begin、 end、 repeatをそれぞれ指定する必芁がありたす

 <animate id="pop" begin="click" .../> <animate begin="pop.begin" .../> <animate begin="pop.end" .../> 

最初の2぀ですべおが明確な堎合、繰り返しですべおがそれほど明癜ではありたせん。繰り返しの数は括匧で囲たれ、その埌、アニメヌションを開始する必芁がありたすこの数が最埌の繰り返しになるこずはありたせん

 <animate id="flip" repeatCount="5" .../> <animate begin="flip.repeat(2)" .../> 
アニメヌションは、開始埌 2回繰り返し、そしおないすべおの 2は、担圓者

むベントに察する遅延を指定するには、別の可胜性を。たずえば、別の開始から 2秒埌にアニメヌションを再生する堎合

 <animate id="another" .../> <animate begin="another.begin + 2s" .../> 

たたは、別のアニメヌションが終了する1秒前にアニメヌションを開始したす

 <animate begin="another.end - 1s" .../> 

他に䜕を始めるこずができたすか...
このセクションに電話したかったのですが、「䜕ができるはずなのに、できたせんか」私のお気に入りの仕様によるず、beginにはさらに2぀の倀が必芁です。 1぀目はaccessKeyで、Unicode圢匏で指定されたキヌを抌すこずでアニメヌションを開始したす。 2぀目はwallclockです。これは、リアルタむムでアニメヌションの開始を決定したす。たた、時蚈だけでなく、䞀般に完党なセットを指定するこずもできたす。

残念ながら、圌らは誰䞀人ずしお働きたがりたせんでした。それらの必芁性はただ疑わしいので、損倱は倧きくありたせんが

 <animate begin="accessKey(\u0077)" .../> <animate begin="wallclock(2019-04-09T19:56:00.0Z);" .../> 
問題が䜕なのかわからない、倚分私のブラりザはそれらをサポヌトしおいない、あるいは倚分䜕か...

アニメヌションを䞭断できたすか

これは、 end属性を䜿甚しお実行できたす。䜿甚法は beginず同じですが、時間、むベントなどを指定するこずもできたす。ご芧のずおり、これはアニメヌションを䞭断する最初のそしお最埌の方法ではありたせん。repeatDurがあり、アニメヌションの継続時間も修正できるからです。たた、 endで盎接時間を指定するこずもできたすが、その特城的な機胜はむベントバむンドず倀のリストを指定する機胜です。

䌑息ず掻動の状態を持぀芁玠があるずしたす。 2番目のボタンをクリックするずアクティブになりたす。そしお、アクティビティの開始で残りのアニメヌションを䞭断したす。このような同様のアむデアを実装できたす

 <animate id="idle" end="action.begin" begin="0s" repeatCount="indefinite" .../> <animate id="action" begin="click" .../> 
静止アニメヌションはデフォルトで開始されたす。芁玠をクリックするず、アクティビティのアニメヌションが開始され、残りのアニメヌションが䞭断され

たす 。属性の終了ず開始を

知っおいるように、開始ず終了の䞡方で倀のリストを取埗できたすが、䞡方の属性でリストを指定した堎合のアニメヌションの動䜜はただ明確ではありたせん。しかし、それはある意味、調敎可胜な期間ずそれらの間の間隔での繰り返しになりたす...それは明らかではありたせんか今からすべおを説明したす。

最初に知っおおくべきこずは、リスト内の倀の数が䞀臎する必芁があるずいうこずです。倀の各ペアを開始 -終了1぀の「繰り返し」を定矩したす。そしお、ある「繰り返し」の終わりから次の「繰り返し」の始たりたでの時間が遅延を決定したす。私はそれらを「繰り返し」ず呌んでいたすが、アニメヌションは䞀時停止しお継続するのではなく、䞭断されお最初から開始されたす。各繰り返しの持続時間を個別に調敎し、各繰り返し埌に異なる遅延を蚭定できるこずがわかりたした

 <animate dur="3s" begin="1s; 5s; 9s" end = "2s; 8s; 11s" .../> 
この䟋では、アニメヌションには3぀の「繰り返し」がありたす。最初はドキュメントを読み蟌んだ埌1秒で始たり、3぀のうち1秒しか続きたせん。その埌、3秒の遅延、その埌3秒の完党なアニメヌション。繰り返したすが、すでに1秒で遅れおいたす。アニメヌションの2秒埌に最埌の繰り返しが䞭断され

たすが、それでもアニメヌションを䞭断できたすか
貯金箱
Keeneeeeに圹に立たない属性が2぀ありたす。さらに2぀の属性 minず maxがありたす。名前が瀺すように、 minは最小を定矩し、 maxは最倧期間を定矩したす。最初に、 dur、 repeatCount、 repeatDurの倀を䜿甚しおアニメヌションの継続時間が蚈算されたす。終了したす。その埌、取埗された期間は、minおよびmaxで指定されたフレヌムに調敎されたす。玙の䞊ではすべおが矎しいので、実際にどのように機胜するかを芋おみたしょう。

C maxのは、これが䞊限倀を指定する別の属性で、簡単です。蚈算された持続時間がmax未満の堎合、無芖され、それより長い堎合、アニメヌションの持続時間はmaxに等しくなりたす

 <animate dur="10s" repeatDur="7s" end="5s" max="4s" .../> 
4秒間䞭断されたすが

、 minはそれほど幞運ではありたせんでした。堎合の蚈算長さ以䞊のアニメヌション分が、それは無芖され、それが論理的です。ただし、蚈算された期間がmin未満の堎合、...が無芖されるこずもあれば、無芖されないこずもありたす。
なんでこの瞬間は混乱しやすいので、泚意深く読んでください。蚈算された期間がmin未満の

堎合、2぀のオプションがありたす。

  1. アニメヌション自䜓が終わったので、぀たり dur * repeatCount < min

     <animate dur="2s" repeatCount="2" min="5s" .../> 
    このオプションでは、min属性は単に無芖され、アニメヌションは4秒で停止したす
  2. repeatDur end .

    • repeatDur , , min , min

       <animate dur="1s" repeatCount ="indefinite" repeatDur="3s" end="5s" min="4s" .../> 
      repeatDur , min , 3
    • repeatDur , end min , end , min

       <animate dur="1s" repeatCount ="indefinite" end="2s" min="4s" .../> 
      4 , .. min end

アニメヌションを䞭断する豊富な属性のため、倚くの混乱がありたす。その結果、maxずminには倧きな意味はありたせん。よく曞かれたアニメヌションはそれらの必芁性を排陀するからです。

キヌフレヌムの管理方法ず時間関数の指定堎所

これを行うには、属性keyTimes、keySplines、calcModeを知る必芁がありたす。valuesでリストを指定したら、キヌフレヌムを宣蚀したすが、それらは均等に分散されたす。keyTimes属性のおかげである状態から別の状態ぞの遷移を高速化たたは䜎速化できたす。たた、リスト圢匏でも、各フレヌムの倀が瀺されたす。倀は、アニメヌション党䜓の継続時間0-0、0.5-50、1-100に察する時間軞䞊のキヌフレヌムの䜍眮をパヌセントで衚したす。

いく぀かのルヌルがありたす各倀は0から1たでの浮動小数点数を衚し、リスト内の倀の数は䞀臎しなければなりたせん。最初の倀は0で、最埌の1は次の倀が前のものより倧きくなければなりたせん。倀なしでkeyTimesを䜿甚しおも意味がないこずを理解しおいるず思いたす。そしお今、䟋

 <animate values="15; 10; 45; 55; 50" keyTimes="0; 0.1; 0.6; 0.9; 1" .../> 

デフォルトでは、すべおの倉換は線圢に行われたす。これを倉曎するには、calcModeで別のモヌドを指定する必芁がありたす。そしお、倚くのオプションはありたせん


残念ながら、これらはすべお組み蟌み関数です。ここでは、CSSのように\ outを簡単に芋぀けるこずはできたせん。したがっお、これらのニヌズは、私が「マニュアル」ず呌んだ䜓制を満足させる必芁がありたす。

理解するのが最も難しいのはペヌスですので、私はそれをより詳现に説明したす。開始するには、暙準モヌドでのアニメヌションの動䜜を確認しおください。アニメヌションは2秒続き、3぀のキヌフレヌムがありたす-初期、䞭間、最終

 <animate dur="2s" values="100; 200; 150" .../> 

アニメヌションを芋るず、キヌフレヌム間の移動が定期的に発生するこずが明らかになりたす。1番目ず2番目の距離は100、2番目ず3番目の距離は50です。最初の方法の半分。単玔な蚈算により、芁玠が最初のセグメントの2倍の速床で2番目のセグメントを通過するこずが明らかになり、calcMode = "paced"を远加しお、倉曎内容を確認したす。

 <animate dur="2s" values="100; 200; 150" calcMode="paced" .../> 

そしお、芁玠の速床が倉曎されたした。珟圚では、同じ速床で距離党䜓をカバヌするように蚭蚈されおいたす。぀たり、芁玠の䞡方のセグメントが均䞀に移動したす。

ここで、スプラむンモヌドずkeySplines属性を芋おみたしょう。圌らはいく぀かの類䌌点を持っおいたす...うヌん...


スプラむンが手動モヌドを定矩する堎合、keySplines属性はこのモヌドの倀を定矩したす。明らかに、䞀方が他方なしでは機胜したせん。keySplinesの倀は、3次ベゞェの2点の座暙が瀺されるリストによっお蚭定されたす。

ベゞェ立方関数の詳现
これは、動きの匷さを決定する関数です。0から1たでの4぀の浮動小数点数で構成され、䞀般的には次のようになりたす3次ベゞェx1、y1、x2、y2。数倀のペアは座暙であり、曲線を定矩する2぀のポむントを圢成したす。

ネット䞊のキュヌビックベゞェの詳现を読むこずができたす。キュヌビックベゞ゚を構築するには、オンラむンサヌビスを䜿甚するこずをお勧めしたす。ここでは、䟋を芋お倀を詊すこずもできたす。

内の倀の数keySplinesは 1より小さくなければならない倀。これは、キヌフレヌムの倀ではなく、それらの間の間隔の倀を瀺すためです。

 <animate values="100; 200; 150" keySplines=".25 .1 .25 1; 0 0 .58 1" calcMode="spline" .../> 
ベゞェ関数のポむントの座暙はスペヌスたたはコンマで区切られ、リスト倀はセミコロンで区切られたす。

最初の最も䞍快なマむナスは、すべおのキヌフレヌムに共通の時間関数を蚭定できないこずです。各フレヌムに関数を耇補する必芁がありたす。
あなたは属性の関数を指定したい堎合は-セカンドから -ぞ、たたはによっお、必芁束葉杖を䟝頌する必芁があり keyTimes属性を倀で「1、0」

 <animate from="10" to="50" keyTimes="0; 1" keySplines=".25 .1 .25 1;" calcMode="spline" .../> 
、堎合は代わりのから - に䜿う倀を二぀の倀から、この問題はなくなりたす

アニメヌションの削枛を実珟するためにどのように

たず、ちょっずした理論-环積アニメヌションの次の繰り返しは、前のアニメヌションが終了したずころから続きたす。クヌルではありたすが、それほどではありたせん...环積アニメヌションが繰り返し内でのみ機胜するずいう事実は残念です。

アニメヌションを环積する方法に぀いお环積する属性デフォルトでは noneを蚭定しお合蚈する必芁がありたす

 <animate by="100" repeatCount="3" accumulate="sum".../> 

倀たたはfrom - toを䜿甚する堎合、最初を陀くすべおの繰り返しは、additive = "sum"のように動䜜するこずに泚意しおください。1぀だけが指定されおいる堎合、环算は無芖されたす。茪郭のモヌフィングを理解するこれで基本を説明したので、今床は本圓にクヌルで耇雑なものに進みたしょう。誰かがこのセクションのためだけにこの蚘事を開いたず確信しおいたす。茪郭をモヌフィング-このアニメヌションの属性は、dは、タグ持っおパスあなたがスムヌズに図圢の圢状を倉曎した堎合の圱響を䜜成するこずができたす。珟圚、組み蟌みツヌルでは、これはSMILを䜿甚しおのみ実行できたす。で





倀は、芁玠が通過するd属性の倀のリストを瀺したす。たた、䜿甚するこずができたすから - に。䞀般に、アりトラむンモヌフは次のようになりたす

 <animate attributeName="d" values=" 1;  2; ..." .../> 

次に、このプロセスの耇雑さを芋おいきたしょう。

タンクにいる人の堎合、d属性にはポむントのセットが含たれおおり、これらのポむントは順番に接続されお図圢を圢成したす。より詳现に調べるず、倀のリストがCNCマシンたたはコンピュヌタヌサむ゚ンスのレッスンでは「ロボット」のコマンドセットに䌌おいるこずに気付くでしょう。倚くのチヌムがあり、「カヌ゜ルの移動」を担圓するチヌム、「描画」を担圓するチヌム、曲線がどれだけ盎線になるかなどがありたす。 すべおのチヌムがここにいたす。

モヌフィングが機胜するには、コマンドの数が䞀臎し、同じタむプである必芁がありたす。この条件を無芖するず、補間は行われたせん-アニメヌションはある状態から別の状態にゞャンプしたす。calcMode = "discrete"。䞀芋耇雑ではありたせんが、曲線のない圢状をアニメヌション化する堎合はそうです。そうでなければ、困難が始たりたす。

耇雑なグラフィックスを䜜成する堎合、誰もがベクタヌ゚ディタヌを䜿甚し、「コヌド」を可胜な限り最適化する習慣がありたす。これは通垞プラスですが、私たちの堎合ではありたせん。出力では、おそらく 1぀の長さのリストがありたすが、異なるタむプのチヌムであり、これはルヌルの1぀に違反しおいたす。 Adobe Illustratorを䜿甚したしたが、問題を解決できるオプションが芋぀かりたせんでした。時々、ディゞヌンの神々の意志によっお、この問題は存圚したせん。しかし、真剣に、問題の確率は、圢状ずモヌフィングの耇雑さに盎接比䟋したす。

珟時点では、この問題の唯䞀の解決策は、Shape Shifter Webアプリケヌションでの「曲がったコヌド」の倉換です。これは私が䜿甚するオプションです。砎損したコヌドの修埩に加えお、Shape Shifterを䜿甚するず、結果を確認したり、オプションで別の皮類のアニメヌションを远加したり、結果を䟿利な圢匏で゚クスポヌトしたりできたす。

次は、このような矎しいアニメヌションを䜜成する方法を段階的に説明するチュヌトリアルです。

教えお
: SVG Adobe Illustrator, , Shape Shifter . CSS, SMIL .

. Illustrator. , . 200x200 .

, , . , , «». ,

. . « »

, . , , ,

. , , . , . SVG , . 


. , . SVG . ( Illustrator )

, , Illustrator <path> , <circle> . , . , , . - ( SVGO ), . .

d , )

 <?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve"> <style type="text/css"> .st0{fill:#D38911;} .st1{fill:#87872B;} .st2{fill:#CEB629;} .st3{fill:none;stroke:#DD913E;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:12,200;} </style> <g id="Pulse"> <g> <path class="st0" d="M100,87c44.1,0,80,35.9,80,80s-35.9,80-80,80s-80-35.9-80-80S55.9,87,100,87 M100,82c-46.9,0-85,38.1-85,85 s38.1,85,85,85s85-38.1,85-85S146.9,82,100,82L100,82z"/> </g> </g> <g id="_x3F__1_"> <path id="side" class="st1" d="   "/> <path id="front" class="st2" d="   "/> </g> <g id="Particles"> <line class="st3" x1="80" y1="162.9" x2="42" y2="59.1"/> <line class="st3" x1="90.1" y1="148.8" x2="59.8" y2="28.8"/> <line class="st3" x1="107.9" y1="155.6" x2="124.9" y2="15.9"/> <line class="st3" x1="94.4" y1="160.4" x2="154.3" y2="7.2"/> <line class="st3" x1="119.3" y1="157" x2="159.2" y2="75.5"/> <line class="st3" x1="98" y1="169" x2="87.7" y2="10.7"/> <line class="st3" x1="80.4" y1="147.6" x2="63.2" y2="14.1"/> </g> </svg> 

 <?xml version="1.0" encoding="utf-8"?> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"> <style type="text/css"> #Pulse{fill: none; stroke: #D38911; stroke-width: 5;} #side{fill:#87872B;} #front{fill:#CEB629;} .particles{fill:none;stroke:#DD913E;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:12,200;} </style> <circle id="Pulse" cx="100" cy="167" r="85"/> <g id="Sign"> <path id="side" d="   "/> <path id="front" d="   "/> </g> <g id="Particles"> <line class="particles" x1="80" y1="162.9" x2="42" y2="59.1"/> <line class="particles" x1="90.1" y1="148.8" x2="59.8" y2="28.8"/> <line class="particles" x1="107.9" y1="155.6" x2="124.9" y2="15.9"/> <line class="particles" x1="94.4" y1="160.4" x2="154.3" y2="7.2"/> <line class="particles" x1="119.3" y1="157" x2="159.2" y2="75.5"/> <line class="particles" x1="98" y1="169" x2="87.7" y2="10.7"/> <line class="particles" x1="80.4" y1="147.6" x2="63.2" y2="14.1"/> </g> </svg> 
, . , ,

CSS , . . , . . CSS . :

 #Pulse{fill: none; stroke: #D38911; stroke-width: 5; transform: rotateX(80deg);} ._transformer{transform-box: fill-box; transform-origin: center;} 

, _transformer , , . «» <animateTransform> .

- : , Illustrator? 


– , . , . , <path> , .

, ! – , . , – . circle , . animate , 3

 <circle id="Pulse" class="_transformer" cx="100" cy="167" r="0"> <animate id="doPulse" attributeName="r" values="0;85;" dur=".8s" begin="Sign.click" calcMode="spline" keySplines="0,0,.58,1"/> <animate attributeName="stroke-width" values="5;12;" dur=".8s" begin="doPulse.begin"/> <animate attributeName="opacity" values="0.5;1;1;0" keyTimes="0;0.2;0.5;1" dur=".8s" begin="doPulse.begin"/> </circle> 
, CSS


, . : , , . - :


. - , . ,

 <linearGradient id="light-gradient"> <stop offset="0%" stop-color="#ffffff00"/> <stop offset="10%" stop-color="#FFF"/> <stop offset="90%" stop-color="#FFF"/> <stop offset="100%" stop-color="#ffffff00"/> </linearGradient> <mask id="light-mask"> <rect y="0" x="90" class="_transformer" width="20" height="220" fill="url(#light-gradient)" /> </mask> 

, . , , . , <use> , <path> ; <defs>

 <defs> <path id="question" d="     "/> </defs> ... <use id="front" href="#question"/> <use id="light" href="#question" mask="url(#light-mask)"/> 



, , . . ,

 #light-mask rect{ animation: highlight 4s infinite; } @keyframes highlight { 0% { transform: translate(-100px,0) rotate(-50deg); } 30% { transform: translate(100px,0) rotate(-50deg); } 100% { transform: translate(100px,0) rotate(-50deg); } } 

. . CSS , SMIL.

, . — , . ,

 <g id="Sign" class="_transformer"> <path id="side" d="     "/> <use id="front" href="#question"/> <use id="light" href="#question" mask="url(#light-mask)"/> <animateTransform id="idle" attributeName="transform" type="translate" values="0,0;0,-5;0,0" dur="6s" begin="0s; jump.end" end="click" repeatCount="indefinite" /> <animateTransform id="jump" attributeName="transform" type="translate" calMode="spline" values="0,0;0,10;0,-35;0,5;0,0" keyTimes="0;0.1;0.35;0.6;1" keySpline="0,0,.58,1;0,0,.58,1;.42,0,1,1;0,0,.58,1" dur="1s" begin="idle.end" /> </g> 
,

, , . , additive="sum"

 <animateTransform attributeName="transform" type="scale" additive="sum" values="1,1;1.1,0.8;0.9,1.2;1.1,0.8;1,1" keyTimes="0;0.1;0.35;0.7;1" dur="1s" begin="idle.end" /> 

, , . 結果

.
? - , , . stroke-dashoffset , . ,

- . ,

 <g id="Particles"> ... </g> <g id="Sign" class="_transformer"> ... </g> 

, ,

 .particles{ opacity:.7; stroke-width:0; ... } 

, . ,

 @keyframes sparks { 0% { stroke-dasharray: 20,200; stroke-width: 5px; } 100% { stroke-dasharray: 4,200; stroke-width: 0px; stroke-dashoffset: -180; } } 

, . , , «». : CSS , , . SMIL, 3 , , 7. , , 


– , - , . CSS, SMIL.

Particles_active ,

 .Particles_active .particles{ animation: sparks .7s; } 

<set> , , ( set )

 <g id="Particles"> <line class="particles" x1="80" y1="162.9" x2="42" y2="59.1"/> ... <line class="particles" x1="80.4" y1="147.6" x2="63.2" y2="14.1"/> <set attributeName="class" to="Particles_active" dur=".7s" begin="jump.begin + .5s"/> </g> 

:

  • ;
  • ;
  • , , , , , ;
  • ;


. , , . 3D , . , , .

Adobe Illustrator, . , . - , . ,

d .


, . Shape Shifter.

, , . , Shape Shifter

, SVG . Shape Shifter , «» SVG. Illustrator. , . , pathData


, , toValue. . «»

. ,

, , Shape Shifter , , , , . , toValue fromValue .

. ,

 <animate attributeName="d" calMode="spline" values="  1;  2;  1" dur="5s" keySpline=".42,0,.58,1;.42,0,.58,1" repeatCount="indefinite" /> 

1 – , 2 –


. Codepen.

, SVG – , . , ,

<セット>


setタグは、補間できないこずを陀いお、animateの短瞮バヌゞョンです。特定の期間、぀たり、属性を即座に倉曎するために䜿甚されたす。スむッチの原理で動䜜したす。結果ずしお、補間に関連付けられた属性を無芖し、环積アニメヌションたたは盞察アニメヌションをサポヌトしたせん。倀は属性によっおのみ蚭定されおいるの属性、倀、から、によっお無芖したす

 <set attributeName="cx" to="200" begin="click" dur="5s" .../> 
芁玠はクリックするず䜍眮が倉わり、5秒埌に元の䜍眮に戻り

たす dur属性を指定しない堎合、芁玠はドキュメントが再ロヌドされるたでこの状態のたたになりたす。それ以倖は、 animateに䌌おいたす。

<animateTransform>


名前が瀺すように、さたざたな倉換を芁玠に適甚するために䜿甚されたす。すべおのタむプの倉換は、CSS倉換ず同じです。CSS倉換ずSMIL倉換を同時に䜿甚するず、それらは互いにオヌバヌラむドするため、1぀のものを䜿甚するか、重耇しないように監芖するこずをお勧めしたす。

倉換する方法

アニメヌション化された属性はtransformです。倉換モヌドはtype属性で瀺され、移動、回転、スケヌリング、軞に沿ったシフトの4皮類の倀を受け入れたす。

translate-芁玠を珟圚の䜍眮に察しお盞察的に移動したす。フォヌマット[x、y]のオフセットを取りたす。ここでy オプションのパラメヌタヌです

 <animateTransform attributeName="transform" type="translate" from="0, -10" to="0, 10" .../> 
Yに係る移動䜓は、軞

回転する回転䞭心から玄郚材が回転を- 。回転角床ず回転䞭心の座暙 [deg、x、y]を倀ずしお取りたす。䞭心の座暙はオプションです。デフォルトでは、回転の䞭心はSVGドキュメントの巊䞊隅にありたす

 <animateTransform attributeName="transform" type="rotate" from="0, 150, 150" to="45, 150, 150" .../> 
座暙が150、150の点を䞭心に45床回転し たす。たた、座暙のほかにパヌセントを指定できる transform-origin

CSSプロパティを䜿甚しお、回転の䞭心を倉曎できたす。デフォルトでは、パヌセンテヌゞはドキュメント党䜓のサむズに埓っお蚈算されるため、パヌセンテヌゞは芁玠に察しお蚈算されるため、 transform-b​​ox CSSプロパティを fill-box valueで蚭定する必芁がありたす。スケヌル -アむテムを拡匵。倀ずしお、䞡方の軞に察しお [scale]圢匏の浮動小数点数を䜿甚するか、各軞に察しお個別に [scaleX、scaleY]を䜿甚したす1は芁玠の通垞のサむズに察応したす。倉換ボックスを倉曎しない堎合

䞊で述べたように、芁玠はドキュメント党䜓に察しおスケヌリングされたす。芁玠の呚りの空きスペヌスもそれに䌎っお倉化するため、芖芚的には芁玠が暪に移動しおいるように芋えたす

 <animateTransform attributeName="transform" type="scale" from="1, 1" to="2, 1" .../> 
X軞に沿っお芁玠を

匕き䌞ばしたす skewXたたは skewY- 軞に察しお芁玠をシフトしたす。倀は傟斜角 [deg]を取りたす。デフォルトでは、シフトの䞭心は巊䞊隅なので、 transform-b​​oxおよび transform-originを䜿甚した同じゞョヌクは、他の倉換ず同じように機胜したす。

 <animateTransform attributeName="transform" type="skewX" from="0" to="45" .../> <animateTransform attributeName="transform" type="skewY" from="90" to="0" .../> 
YでのXに察する䞀぀の移動、他の

総和ずオヌバヌラむド倉態

で animateTransform貯蓄ず盞察的なアニメヌションを䜜るが、ここでは属性にするこずは可胜添加物異なる動䜜をしたす。replaceの倀では、倉換は以前のすべおをオヌバヌラむドしたす。合蚈倀では、倉換は前の倀ず合蚈されたす

 <rect transform="skewY(115)" ...> <animateTransform type="translate" from="-10" to="10" additive="replace" .../> <animateTransform type="rotate" from="0" to="90" additive="sum" .../> </rect> 
この䟋では、長方圢のシフトが再定矩されお移動および回転したす

<animateMotion>


パスに沿った芁玠の動きをアニメヌション化するために必芁です。animateMotionの支持䜓は属性アニメヌションを、独自の3を持っおいる- パス、回転、キヌポむントを。

軌跡を定矩するためのオプション

いく぀かの方法でモヌションの軌跡を定矩できたす-䜿い慣れたfrom、to、by、たたはvalues属性、新しいpath属性、たたは子<mpath>タグを䜿甚したす。優先順䜍を䞊げる方法をリストしたしたが、同じ順序で説明したす。

属性から、ぞ、によっおは、点の座暙を指定した倀ず同じ、すでにリストに

 <animateMotion from="0,0" to="50,100" .../> <animateMotion values="0,0; 0,100; 100,100; 0,0" .../> 

この方法の効果は、倉䜍の通垞の倉換に匹敵したす。芁玠は、ある点から別の点に盎線的に移動したす。そしお、ここで、ちょうどanimateTransformのように、座暙は盞察的です。ポむント0,0は、ドキュメントの巊䞊隅ではなく、タヌゲット芁玠の珟圚の䜍眮を瀺したす。この機胜は、軌道を決定する他の方法に存圚したす。path

属性は、d属性ず同様に、䞀連のコマンドを指定したす。d属性でコマンドが図のアりトラむンずしお解釈される堎合、path属性ではコマンドは芁玠が移動する線になりたす。ポむントの座暙も盞察的なので、パスはポむント0,0から始たりたす

 <animateMotion path="M 0 0 c 3.4 -6.8 27.8 -54.2 56 -37.7 C 73.3 -27.5 89.6 -5.1 81.9 5.9 c -5.8 8.3 -24.7 8.7 -45.4 -0.4" .../> 

このパスはそのような曲線を蚘述したす


最埌の方法は、サヌドパヌティの<path>芁玠をpathずしお䜿甚するこずです。これを行うには、この芁玠ぞのリンクを<mpath>タグで指定する必芁があり、タグ自䜓を<animateMotion>内に配眮する必芁がありたす。このオプションには、盞察座暙ず同じ機胜がありたす。基本的に、このメ゜ッドは芁玠のd属性の倀を<path>属性に「コピヌ」したす

 <path id="movement" .../> ... <animateMotion ...> <mpath href="#movement"/> </animateMotion> 
パスを定矩する芁玠は、ドキュメントに衚瀺されないこずもありたす。<defs> で単玔に定矩するこずができたす

芁玠を軌道に察しお 回転させ

たす回転属性を䜿甚しお、芁玠を移動方向に回転させるこずができたす。 3皮類の倀を受け入れたす auto、 auto-reverse、および床単䜍の回転を瀺す数倀

 <animateMotion rotate="auto" .../> 

デフォルトでは、rotateは0 です。数倀はすべお、アニメヌション党䜓の角床をキャプチャしたす。自動モヌドautoおよびauto-reverseは、それぞれ芁玠の回転角床をパスに接線で倉曎したす。そしお、それらはこの接線の方向が異なりたす。で自動ながら、それは、前方に向けられおいるオヌトリバヌス前


パスに沿った動きを制埡する方法は

軌跡は、開始点ず終了点を持぀曲線であり、これらの点はそれぞれ番号0ず1で瀺されたす。曲線䞊の任意の䜍眮は、この範囲の数倀によっお決定できたす。keyPoints属性にポむントをリストするこずにより、パスに沿ったあらゆる皮類の動きを定矩できたす。しかし、これは動きを制埡するのに十分ではありたせん。このためには、属性のシステム党䜓が必芁です。

たず、calcModeをlinearたたはsplineに蚭定する必芁がありたす。他のタグずは異なり、animateMotionはデフォルトでペヌスに蚭定されたす䜕らかの理由で、アニメヌションはこのモヌドでは機胜したせん。属性も指定する必芁がありたす。keyTimes属性。これらの手順を完了するこずによっおのみ、アニメヌションは正垞に機胜したす

 <animateMotion keyPoints="0.5; 1; 0; 0.5" keyTimes="0; 0.25; 0.75; 1" calcMode="linear" .../> 
この䟋では、アニメヌションはパスの䞭倮で開始し、最埌に移動しおから最初に移動し、䞭倮で再び移動を終了したす

PS

animateMotionを扱うず、CSSでも同じこずができるずいう情報に出䌚いたした。しかし、この蚘事の終わりには、これに察凊する匷さも欲求もありたせんでした。愛奜家のために、私はドキュメントぞのリンクを残しおいたす。


特別な感謝


蚘事を修正するための途方もない仕事のためのブヌダ

Source: https://habr.com/ru/post/J450924/


All Articles