高度なsnap.svg
以前の投稿では、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>
<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>
この最後の例では、より複雑な勾配を示しました。異なるタイプ(絶対線形)に加えて、この勾配は(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>
スナップオブジェクトのアニメートメソッドを呼び出すことにより、アニメーションの各ステップで実行されるアクションを詳細に指定することができます。これにより、複雑なアニメーションをグループ化して同期して実行するのに役立ちます(ただし、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>
クリックハンドラーは、後で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>
をロードします この素晴らしいライブラリの最も強力なポイントの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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

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

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
