DAG グラフを描画する場合、ノード間の関係はノードと矢印間の接続線によって表されます。ノードには状態があることがよくあります。ノード間の処理関係をより適切に表現するために、ロード中の状態のノードは、後続のノード間のアニメーション化された点線で表現され、処理中であることを示す必要があります。処理後は実線になります。原理は、ページが読み込まれる前に読み込みプロンプトを追加するのと同じで、より優れたインタラクティブなエクスペリエンスを提供できます。
1. Gojsの実装gojs の基本的な使用方法については、前回の記事「データ視覚化のための gojs の使用に関する簡単な紹介」を参照してください。 たとえば、国慶節が近づいており、上海から北京へ旅行したいと考えています。現在、安徽省から安徽省を経由して山東省へ向かっているとします。次のように gojs で描画します。 1. 描画<!-- コンテナ --> <div id="myDiagramDiv" style="height:600px;width:100%;border:1px solid black"></div> <!-- gojs をインポート --> <script src="https://unpkg.com/gojs/release/go.js"></script> // ジェネレーター const $ = go.GraphObject.make; // コンテナを定義します。myDiagramDiv はコンテナ ID です const ダイアグラム = $(go.Diagram, 'myDiagramDiv'); // ノード テンプレート。各ノードの構築方法を記述します。diagram.nodeTemplate = $(go.Node, "Auto", // ボックスはテキストに自動的に適応します。$(go.Shape, "RoundedRectangle", new go.Binding("fill", "color")), $(go.TextBlock、{margin: 5}、新しいgo.Binding("text", "name")) ); // ノードとリンク情報を記述するモデルを定義します。diagram.model = new go.GraphLinksModel( [ // ノード { キー: 'shanghai'、 名前: "出発地 上海"、 色: "lightblue" }, { キー: '江蘇省'、名前: "江蘇省"、色: "ピンク" }, { キー: 'anhui'、名前: "Anhui"、色: "pink" }, { キー: '山東'、名前: "山東"、色: "オレンジ"}, { キー: '河北省'、名前: "河北省を通過"、色: "オレンジ" }、 { キー: 'tianjin'、名前: "Tianjin via"、色: "orange" }、 { キー: '北京'、名前: "目的地北京"、色: "ライトグリーン" } ]、 [ // 接続 { from: "上海", to: "江蘇" }, { 発信元: "江蘇省", 宛先: "安徽省" }, { 発信元: "安徽省", 宛先: "山東省" }, { 発信元: "山東省", 宛先: "河北省" }, { 発信元: "河北省", 宛先: "天津市" }, { 発信元: 「天津」、宛先: 「北京」 } ] ); この時点では、簡単な移動経路関係図は描かれていますが、点線のアニメーションはありません。 2. 破線の実装実装された図には実線と点線の両方があるため、ここでは 実線と破線のテンプレートを定義する // 実線と点線のテンプレートを格納するコレクションを定義します。const templmap = new go.Map() 定数カラー = '#000' //デフォルトの接続テンプレート const defaultTemplate = $( go.Link、 $(go.Shape, { ストローク: 色, ストローク幅: 1 }), $(go.Shape, { toArrow: 'Standard', 塗りつぶし: 色, ストローク: 色, ストローク幅: 1 }) ) // 破線テンプレート、キー属性:strokeDashArray: [6, 3] 定数破線テンプレート = $( go.Link、 // name: 'dashedLink'、後でアニメーションで使用されます $(go.Shape, { name: 'dashedLink',stroke: color,strokeWidth: 1,strokeDashArray: [6, 3] }), $(go.Shape, { toArrow: 'Standard', 塗りつぶし: 色, ストローク: 色, ストローク幅: 1 }) ) templmap.add(''、デフォルトテンプレート) // dashed は名前で、説明は属性カテゴリを使用して指定されます: 'dashed' templmap.add('dashed', dashedTemplate) diagram.linkTemplateMap = テンプレートマップ モデル データで、破線として記述する必要があるエッジを見つけて、属性 { from: "anhui", to: "shandong", カテゴリ: 'dashed' }, この時点では、実線と点線の両方が描かれています。次は最終アニメーションです。 3. 点線を動かす破線を見つけてプロパティを変更します:strokeDashOffset 2つの方法があります
関数アニメーション(){ 定数アニメーション = 新しい go.Animation(); // 点線アニメーション diagram.links.each((link) => { const dashedLink = link.findObject("dashedLink"); if (破線リンク) { アニメーション.add(dashedLink, "strokeDashOffset", 10, 0) } }); アニメーションのイージングを Go のアニメーションに反映します。 // 無期限に実行 アニメーションの実行回数を無限大にする アニメーションを開始します。 } アニメーション()
関数アニメーション(){ 定数ループ = () => { アニメーションタイマー = setTimeout(() => { const oldskips = diagram.skipsUndoManager; diagram.skipsUndoManager = true; // 点線アニメーション diagram.links.each((link) => { const dashedLinkShape = link.findObject("dashedLink"); if (破線リンクシェイプ) { 定数 off = dashedLinkShape.strokeDashOffset - 3; // ストロークアニメーションを設定(移動) dashedLinkShape.strokeDashOffset = (off <= 0) ? 60 : off; } }); diagram.skipsUndoManager = oldskips; ループ(); }, 180); } ループ() } アニメーション() アニメーションには 2 つの方法があります。ノード ポート接続の相互作用がない場合は、最初の方法を使用してライブラリ アニメーションを実装することをお勧めします (内部的に最適化される場合があります)。アニメーションをより柔軟に制御したい場合、または最初の方法が不可能な場合は、2 番目の方法を使用してください。 この時点で、全体の効果は完成します。 2. 点線と点線アニメーションの原理上記のコードでは、主に 2 つの主要なプロパティ、strokeDashArray とstrokeDashOffset を使用しています。 文書には 2 行あります。 詳細については、Stroke Line Dash Array (w3.org)、Stroke Line Dash Offset (w3.org) を参照してください。 その背後にはキャンバスがあり、その2つのプロパティ 参照: mdn - setLineDah: Array 配列。交互の線分の長さとそれらの間の間隔 (座標空間単位) を表す数値の配列。 配列要素の数が奇数の場合、配列の要素がコピーされ、繰り返されます。 コード例: 関数drawDashedLine(パターン) { ctx.beginPath(); ctx.setLineDash(パターン); ctx.moveTo(0, y); ctx.lineTo(300, y); ctx.stroke(); y + = 20; } 定数キャンバス = document.getElementById('キャンバス'); const ctx = canvas.getContext('2d'); y = 15とします。 破線を描画します([]); 破線を描画します([1, 1]); 破線を描画します([10, 10]); 破線を描画します([20, 5]); 破線を描画します([15, 3, 3, 3]); 破線を描画します([20, 3, 3, 3, 3, 3, 3, 3]); drawDashedLine([12, 3, 3]); // [12, 3, 3, 12, 3, 3] に等しい mdn - lineDashOffset: 破線のオフセットプロパティを設定します コード例: var キャンバス = document.getElementById("キャンバス"); var ctx = canvas.getContext("2d"); var オフセット = 0; 関数draw() { ctx.clearRect(0,0, キャンバスの幅、キャンバスの高さ); ctx.setLineDash([4, 2]); ctx.lineDashOffset = -オフセット; ctx.strokeRect(10,10, 100, 100); } 関数行進() { オフセット++; (オフセット>16)の場合{ オフセット = 0; } 描く(); setTimeout(3月20日); } 行進(); 3. 点線の概念破線: (数学的概念) 点または短い線で描かれた不連続な線。主に幾何学的図形や記号に使用されます。 点線はなぜ蟻線と呼ばれるのでしょうか? 蟻の列: 先頭の蟻が餌や洞窟に向かってランダムな経路で歩き、2 番目の蟻がそのすぐ後ろを追って同じ経路に沿って歩き、後続の蟻が先頭の蟻の後を追って一列に歩くという動物の本能的な現象。 点線の特徴:流動性 4. CSS 描画境界線破線CSS の border-style を使用して描画する場合、プロパティ値は 2 つあります。
詳細については、mdn-border-styleを参照してください。 ネイティブ CSS プロパティでは点線効果を実現できますが、これに基づいてアニメーションを実装するのは簡単ではありません。ただし、他の CSS プロパティを使用して実現することもできます。 例: <div class="container">アリの列</div> 。容器 { 幅: 100ピクセル; 高さ: 100px; パディング: 5px; 境界線: 1px 透明の実線; 背景: 線形グラデーション(白、白) パディングボックス、 繰り返し線形グラデーション(-45度、黒0、黒、25%、透明0、透明50%) 0% 0% / 0.6em 0.6em; アニメーション: アリ 10 秒 線形 無限; } @keyframes アリ { に { 背景位置: 100% 100%; } } Gojs を使用して蟻の線のアニメーション効果を実装する方法に関するこの記事はこれで終わりです。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援して頂ければ幸いです。 以下もご興味があるかもしれません:
|
<<: Founder フォント ライブラリの中国語と英語のファイル名比較表
良い画像素材のウェブサイトを見つけるのは難しいです。特に無料です。良い写真には非常に目を引く視覚効果...
vueプロジェクトをパッケージ化してサーバーにデプロイし、正常にログインできるが、ローカルで起動する...
1. 分割スクリプト (splitNginxLog.sh) を作成します。 * この例では、ログ分割...
MySQL解凍版とNavicatデータベース操作ツールのインストールは、以下のとおりです。 1. M...
まず、ページにビデオを埋め込むための HTML コードは次のとおりです。コードをコピーコードは次のと...
W3C の原則によれば、XML の各開始タグには対応する終了タグが必要です。つまり、<html...
MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...
目次MySQL NDB Clusterとはクラスター構築のための準備作業クラスターのデプロイを開始す...
最近の要件:グローバルロード、すべてのインターフェースはロード待機機能を表示するかどうかを手動で制御...
まずは簡単なデータを見てみましょう。 Googleが発表したレポートによると、 ①中国の都市の97%...
JavaScript を使用して Web ページ クロックを実装します。効果は次の図に示されています...
ソースコードを通じて Linux に最新の安定バージョンの MySQL をインストールします: my...
1. 動的コンポーネント <!DOCTYPE html> <html> &l...
目次背景実装のアイデア成果を達成する背景最近取り組んでいるプロジェクトは、Vue2 で構築されたプロ...
MySQL はオープンソースの小規模リレーショナル データベース管理システムです。現在、MySQL...