以前の投稿では、snap.svgを始める方法を見てきました。この投稿では、最初の記事に記載されている新しい機能を詳しく見ていきます。
キーテイクアウト- Advanced Snap.svgは、複雑なマスク、勾配、パターンの作成を可能にし、ユニークでダイナミックなグラフィックスを作成できます。
- snap.svgは、独立して同期する両方の要素をアニメーション化するさまざまな方法を備えた包括的なアニメーション機能を提供します。 snap.svgでのイベント処理により、クリック、ダブルクリック、マウスの動き、タッチイベントを処理する方法を使用して、ユーザーインタラクションを可能にします。
- snap.svgは、既存のSVGコードの再利用をサポートしており、SVGコードを文字列として注入したり、既存のファイルを読んだりします。 Snap.svgのDocumentFragmentsを使用してDOMを操作すると、 パフォーマンスが向上し、大規模なSVG図面の大幅なパフォーマンスの節約につながります。
- マスキング
- 描画表面、シンプルな形状を作成する方法を思い出して、画像をロードすることから始めましょう。
- 円は今のところ画像の中心を覆っています。
ただし、長方形の画像しか持てないのは残念です。たぶん、あなたのデザイナーは素敵な円形のボタンや画像を作成しました。もちろん、いくつかの解決策がありますが、それらはすべて別の問題を残しています。ベストケースのシナリオ、デザイナーはページの背景と一致する外側の画像を提供できます。ただし、背景がしっかりしていると仮定すると、色を変更する必要がある場合は、画像を編集する必要があります。透明性を使用できますが、PNGなどの重い形式を必要とするか、GIFを使用してゆるい品質が必要です。数年で、おそらく、WebPはすべてのブラウザによって完全にサポートされ、それが難問を終わらせるでしょう。いずれにせよ、画像に対話性が必要な場合は、Mouseenter、Mouseout、Clickなどのイベントに応答する長方形の形状に固執します。
過去にフラッシュを長い間扱っていたので、SVGで最もイライラするものの1つは、SVG 1.1に導入されたマスクを使用できないことでした。スナップでは、画像を含むあらゆる要素にマスクを適用するのは非常に簡単です。基本的に、マスクプロパティを要素に割り当てるだけです。実際のマスクとして使用する要素に注意する必要があります。最終要素の不透明度はマスク要素の白のレベルに比例するため、画像に完全な不透明度が必要な場合は、白の円を埋める必要があります。最初は迷惑に思えるかもしれませんが、次のセクションで見られるように、驚くべき効果の可能性が多くなります。
<span>var paper = <span>Snap</span>(800, 600), </span> img <span>= paper.image('bigImage.jpg', 10, 10, 300, 300), </span> bigCircle <span>= s.circle(150, 150, 100);</span>複雑なマスクを作成するために、明らかに異なる形状を組み合わせて構成できます。 SNAPは、あなたを助けるためにいくつかの構文砂糖を提供します:
<span>var paper = <span>Snap</span>(800, 600), </span> img <span>= paper.image('bigImage.jpg', 10, 10, 300, 300), </span> bigCircle <span>= s.circle(150, 150, 100);</span>
Paper.Mask()メソッドはPaper.g()に相当し、実際にはシームレスに置き換えることができます。
クリッピングクリッピングパスは、塗料を適用できる領域を制限するため、現在アクティブなクリッピングパスに囲まれた領域の外側の図面の部分は描画されません。クリッピングパスは、目に見える領域(クリッピングパス内)を持つマスクと考えることができます。アルファ値は1で、隠し領域のアルファ値は0です。1つの違いは、マスクによって隠された領域がイベントに応答するのに対し、 、切り取られた領域はありません。
スナップにはクリッピング用のショートカットがありませんが、attr()メソッドを使用して、任意の要素のクリップ、クリップパス、クリップルートプロパティを設定できます。
勾配
SVG 1.1を使用すると、勾配を使用して形状を埋めることができます。もちろん、これらの形状を使用してマスクを埋める場合、マスクの詰め物を変更して最終図面のアルファレベルを指定し、驚くべき効果を作成する可能性を活用できます。 SNAPは、勾配を作成するショートカットを提供します。これは、後で他の要素の充填プロパティに割り当てることができます。以前のコードをほんの少し変更した場合、たとえば:
このコードをテストする場合、最終的な効果は正確に期待したものではありません。これは、上記の小文字の「R」で表される相対的な放射勾配タイプを使用したからです。相対勾配は、グループの各要素に対して個別に作成されます(複合マスクとして)。グループ全体に単一の勾配を持つことを好む場合は、コマンドの絶対バージョンを使用できます。 'r()#fff-#000'は、中心で白い塗りつぶしから始まり、境界で黒に分解される絶対的な放射勾配です。
bigCircle<span>.attr('fill', '#fff'); //This is IMPORTANT </span> img<span>.attr({ </span> <span>mask: bigCircle </span><span>});</span>要素の充填プロパティのSVG勾配を指定することで同じ結果を得ることができます。
この最後の例では、より複雑な勾配を示しました。異なるタイプ(絶対線形)に加えて、この勾配は(0、0)から(300、300)、黒から赤から25%になります。
gradient()メソッドは文字列を受け入れます。詳細については、SNAPのドキュメントで説明していますページ内の任意のSVG要素から既存の勾配を使用することもできます。
<span>var smallRect = paper.rect(180, 30, 50, 40), </span> bigCircle <span>= paper.circle(150, 150, 100), </span> mask <span>= paper.mask(bigCircle, smallRect); </span> mask<span>.attr('fill', 'white'); </span> img<span>.attr({ </span> <span>mask: mask </span><span>});</span>
パターン
パターンにより、別のSVG形状、勾配、または画像の発生を繰り返すことで形状を埋めることができます。 SNAPは、任意のスナップ要素からパターンを作成するelement.topattern()メソッド(formely、pattern()、debrecated)を提供します。
パターンを作成して要素を埋めることは非常に簡単です:
<span>var gradient = paper.gradient('r()#fff-#000'); </span>mask<span>.attr('fill', gradient);</span>代わりに、グラデーションとパターンを組み合わせたい場合、それは別のストーリーであり、少し複雑なストーリーです! 例として、上記の勾配とパターンを組み合わせたマスクを作成する方法を見てみましょう。
<span>var paper = <span>Snap</span>(800, 600), </span> img <span>= paper.image('bigImage.jpg', 10, 10, 300, 300), </span> bigCircle <span>= s.circle(150, 150, 100);</span>
基本的に2レベルのマップを作成する必要があります。勾配で埋める画像で使用される最終マップには、勾配で満たされたマップ自体があります。結果は非常に印象的です!これはまた、あなたが想像するものを行うclone()メソッドを紹介する良い機会でもありました。それが呼ばれる要素の深いコピーを作成します。
アニメーションアニメーションは、snap.svgの最も作成された機能の1つです。アニメーションを処理する方法はいくつかあり、動作はわずかに異なります。
element.animate()
最もシンプルなアニメーションメソッドであるelement.anime()から始めます。この方法により、ユーザーはすべての要素のプロパティをすべて同期させることができます。プロパティの初期値は、もちろん現在の値であり、最終的な値はAnimate()の最初の引数で指定されています。変更するプロパティに加えて、アニメーションの期間、その使いやすさ、アニメーションが完了すると呼び出されるコールバックを渡すことができます。
例では、すべてが明確になります:
これは、マスク内の大きな円を2秒間にわたってより小さな半径に縮小するだけです。
set.animate()bigCircle<span>.attr('fill', '#fff'); //This is IMPORTANT </span> img<span>.attr({ </span> <span>mask: bigCircle </span><span>});</span>
グループ内(セット)の要素を個別にアニメーション化できます。しかし、セット全体を同期してアニメーション化したい場合はどうでしょうか?簡単! set.anime()を使用できます。これにより、セット内のすべての要素に同じ変換が適用され、さまざまなアニメーション間の同期性が確保され、すべての変更を一緒に収集することでパフォーマンスを向上させます。
セットの各要素を個別にアニメーション化することもできますが、同期することもできます。 set.animate()は、さまざまな数の引数を受け入れます。これにより、アニメーションする必要がある各サブ要素の引数で配列を渡すことができます。
これまでのサンプルコード(CodePenで試してみてください)を正しくフォローしていると仮定すると、ブラウザのコンソールで上記のコードを実行すると、3つの要素が同期してアニメーション化される方法がわかります。上記のコードは、セット(Select()およびSelectAll()メソッドの結果として)を導入するチャンスであり、それらに定義されたいくつかの有用なメソッドとして。
セットを作成する別の方法は、要素の配列をスナップコンストラクターメソッドに渡すことです。<span>var smallRect = paper.rect(180, 30, 50, 40), </span> bigCircle <span>= paper.circle(150, 150, 100), </span> mask <span>= paper.mask(bigCircle, smallRect); </span> mask<span>.attr('fill', 'white'); </span> img<span>.attr({ </span> <span>mask: mask </span><span>});</span>
snap.animate()
<span>var gradient = paper.gradient('r()#fff-#000'); </span>mask<span>.attr('fill', gradient);</span>任意の数値プロパティをアニメーション化できますが、Animate()は他のタイプでは機能しません。たとえば、テキスト属性をアニメーション化しようとすると、テキスト要素が台無しになります。しかし、そのような効果を得る別の方法、つまり、snap。
スナップオブジェクトのアニメートメソッドを呼び出すことにより、アニメーションの各ステップで実行されるアクションを詳細に指定することができます。これにより、複雑なアニメーションをグループ化して同期して実行するのに役立ちます(ただし、set.animate()メソッドはこの問題に対処する正しい方法です)。 たとえば、
テキスト要素を作成してアニメーション化しましょうイベント処理
<span>var paper = <span>Snap</span>(800, 600), </span> img <span>= paper.image('bigImage.jpg', 10, 10, 300, 300), </span> bigCircle <span>= s.circle(150, 150, 100);</span>マスクと画像の最初の比較に戻ると、前のセクションでアニメーションGIF(一種)で示したのと同じ効果を得ることができます。ただし、ユーザーの相互作用に応じてこの動作を再現したい場合、SVGを使用した改善はさらに関連しています。複数のGIFを使用して機能させる方法を見つけることができますが、柔軟性を失うことに加えて、同じ品質を少しも努力しても、
クリックハンドラーは、後でelement.unclick()メソッドを使用して削除できます。 同様に処理できる他のイベントの中でも、DBLClick、Mousedown and Mouseup、Mousemove、Mouseout、Mouseover、およびTouchstartやTouchendなどのモバイル指向のイベントが多数あります。
jqueryまたはd3インターフェイスに使用されていた読者の場合、他のイベントを手動で処理するためにon()メソッドがありません。 SNAPで提供されるハンドラーを超えたカスタム動作が必要な場合は、関連するDOM要素への参照を含む要素のノードプロパティを取得できます。そしてそれへのプロパティは直接:
bigCircle<span>.attr('fill', '#fff'); //This is IMPORTANT </span> img<span>.attr({ </span> <span>mask: bigCircle </span><span>});</span>
ドラッグアンドドロップ
SNAPは、要素、drag()メソッドを使用して、任意の要素、グループ、またはセットのドラッグアンドドロップを特に簡単にアクティブにします。カスタム動作が必要ない場合は、議論なしでそれを呼び出すことができます:
ただし、特別な動作が必要な場合は、OnMove、Ondragstart、Ondragendイベントにカスタムコールバックとコンテキストを渡すことができます。次のコールバックを渡す場合は、オンモーブコールバックを省略できないことに注意してください。
ドラッグハンドラーを追加しても、クリックイベントは非表示になりません。これは、オンドラゲンドのイベントの後に発射されます。<span>var smallRect = paper.rect(180, 30, 50, 40), </span> bigCircle <span>= paper.circle(150, 150, 100), </span> mask <span>= paper.mask(bigCircle, smallRect); </span> mask<span>.attr('fill', 'white'); </span> img<span>.attr({ </span> <span>mask: mask </span><span>});</span>既存のsvg
をロードします この素晴らしいライブラリの最も強力なポイントの1つは、既存のSVGコードの再利用をサポートすることです。文字列として「注入」することも、既存のファイルを読み取り、変更することもできます。
自分で試すことができます。プロジェクトのルートにダウンロードして、この素敵なSVG図面に保存してください。次に、ページにロードし、DOMツリーに追加する前であっても、イベントハンドラーなどを追加する前であっても、そのスタイルや構造を変更します。
<span>var gradient = paper.gradient('r()#fff-#000'); </span>mask<span>.attr('fill', gradient);</span>注
:ブラウザの同性ポリシーのため、ロードメソッドをテストするには、ローカルサーバーで例を実行する必要があります。
パフォーマンスの改善
DOMを操作するときにパフォーマンスを改善する1つの方法は、ドキュメントフレーズを使用しています。フラグメントは、DOMノード用の最小限のコンテナです。数年前に導入されたこのサブツリー全体を安価に操作してから、nの代わりに2つのメソッド呼び出しでnノードを含むサブツリー全体をページにクローンして追加することができます。実際の違いは、John Resigのブログで詳細に説明されています。
SNAPでは、2つの方法を使用して、フラグメントをネイティブに使用できます。
- snap.parse(svg)は、svgコードを備えた文字列である単一の引数を取り、それを解析し、後で描画表面に追加できるフラグメントを返します。
-
-
特に大きなSVG図面の場合、フラグメントは、適切に使用すると、パフォーマンスを大幅に節約することができます。
結論
いくつかの便利なリンク:
snap.svgチュートリアル。
snap.svgドキュメント。
- 高度なスナップSVG
- に関するよくある質問
- SNAP SVGは、Scalable Vector Graphics(SVG)を使用するために特別に設計された強力で柔軟なJavaScriptライブラリです。 SVGは、表示されている画面のサイズや解像度に関係なく明確さを維持する高品質でスケーラブルなグラフィックを作成できるため、Web開発の不可欠な部分です。 SNAP SVGは、SVGを操作およびアニメーション化するための堅牢なツールセットを提供することにより、この機能を強化し、開発者がWebサイトのインタラクティブでダイナミックなグラフィックスとアニメーションを簡単に作成できるようにします。 ?
以上が高度なsnap.svgの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
