RealtSVGにアニメーションを入れる
14300 ワード
ReactSVGにViewBoxを操作するアニメーションを追加します.
アニメーションの使用方法
いろいろあるかもしれませんが、以下のように見つかりました.CSS使用 classまたはidを持つ単純なオブジェクトに単純なアニメーションを提供する際の絶好の方法 CSSにビューを渡すとJSがきれいになるので、アニメーションは要素のみにclassを指定することが望ましい. classまたはIDを正しく指定する必要があります. 現在はsvgを使用しているため、jsのデータを頻繁に出入りする必要があるが、望ましくないように見える SMIL HTMLで使う 既知存在、調査無し ・コメントリンクを見ると、投稿自体も古く、投稿にSMILを書く傾向もあります. GSAP 動画ライブラリ 現在JSアニメーションを使用している最も簡単な方法 アニメーションはメインではないので、簡単にアニメーションを実現するためにGSAPを使ってアニメーションを実現することにしました.
次に、試したコードの一部を示します.
コメントリンク結果・設定CSSPlugin(DOM要素におけるCSSに関するPropertyに関するプラグイン)
したがって、プロジェクトの最上位(最優先の初期化プロセス)には、次の内容が記録されます.結果は以下の通り 結果は変わらない( Cannot read properties ...)
pluginレジスタに何か問題があるようです
=>最終的には、次の方法で駆動に成功しました.Plugin項目の削除 次のコード以下のコードを参考に修正
上記の修正を行いましたが、最終的には所期の目標に達しませんでした.
targetを次のように変更します.
結局、願いがかなった!
座標設定が不備なため、間違った場所を指すが、目標を達成した.座標を変更することで変更できます.
機能しない理由は、ViewBoxが単一の要素ではなくsvgファイルに対応しているからです.
アニメーションの使用方法
いろいろあるかもしれませんが、以下のように見つかりました.
最初の試み
次に、試したコードの一部を示します.
svg.addEventListener('click', this.onClick.bind(this));
//중략 ...
onClick(event){
if(event.target.getAttribute('name'))
{
//console.log(event.target.getBoundingClientRect());
let rect = event.target.getBoundingClientRect();
this.current_viewbox.x = rect.top;
this.current_viewbox.y = rect.bottom;
this.current_viewbox.width = rect.width;
this.current_viewbox.height = rect.height;
this.animatingViewBox(event.target, this.current_viewbox.x, this.current_viewbox.y, this.current_viewbox.width, this.current_viewbox.height);
}
}
animatingViewBox(target, x,y,width,height){
gsap.to(target, {
duration: 1,
viewBox : `${x} ${y} ${width} ${height}`
});
}
上記のコードの実行結果には、次のログが残ります.Invalid property viewBox set to 312.7962646484375 544.2816772460938 288.6868896484375 231.48541259765625 Missing plugin? gsap.registerPlugin()
上記の機能を実行するにはpluginが必要なようです.コメントリンク結果・設定CSSPlugin(DOM要素におけるCSSに関するPropertyに関するプラグイン)
CSSPlugin試行
したがって、プロジェクトの最上位(最優先の初期化プロセス)には、次の内容が記録されます.
gsap.registerPlugin(gsap.plugins.CSSPlugin);
TypeError: Cannot read properties of undefined (reading 'name')
pluginレジスタに何か問題があるようです
animatingViewBox(target, x,y,width,height){
console.log("animating View Box...");
gsap.to(target, {
duration: 1,
attr: {viewBox: `${x} ${y} ${width} ${height}`},
ease: "power3.inOut"
});
}
エラーの原因は、以前のイベントコードとGSAP 2.0バージョンで使用されていたTweepMaxの混合コード、および使用方法のエラーです.targetの変更
上記の修正を行いましたが、最終的には所期の目標に達しませんでした.
targetを次のように変更します.
onClick(event){
if(event.target.getAttribute('name'))
{
let rect = event.target.getBoundingClientRect();
this.current_viewbox.x = rect.top;
this.current_viewbox.y = rect.bottom;
this.current_viewbox.width = rect.width;
this.current_viewbox.height = rect.height;
this.animatingViewBox(this.svg, this.current_viewbox.x, this.current_viewbox.y, this.current_viewbox.width, this.current_viewbox.height);
}
}
変更内容は、要素(イベントのターゲット)ではなくSVG全体に対して指定されます.結局、願いがかなった!
座標設定が不備なため、間違った場所を指すが、目標を達成した.座標を変更することで変更できます.
機能しない理由は、ViewBoxが単一の要素ではなくsvgファイルに対応しているからです.
Reference
この問題について(RealtSVGにアニメーションを入れる), 我々は、より多くの情報をここで見つけました https://velog.io/@fgprjs/ReactSVG에-애니메이션-넣어보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol