最近、Vue を使用して、ドラッグ可能なツリー構造図という小さなプロジェクトを作成しました。 Vue 再帰コンポーネントこの構造はVueの再帰コンポーネントを通じて実装されている。 レイアウトはフレックスを使用し、構造線はCSS疑似クラスによって実装されています。 注意すべき点は、中央揃えレイアウトの場合、X 軸上の要素が多すぎて子要素の幅がビューを超えてしまうと、要素が中央揃えされた後にスクロール バーはあるものの、右側のコンテンツにしか届かず、左側のコンテンツにはアクセスできなくなることです。親要素を inline-flex に設定し、幅を auto に設定することができます。もちろん、上記のような構造であれば、このような問題は発生しませんが、ビッグデータのレンダリングとなると、やはり午後は悩みました。 ドラッグイベントまず、ドラッグしたい要素にドラッグ可能な属性をバインドします。デフォルトでtrueに設定されている<a>タグと<img>タグを除き、他のすべての要素は次のように設定する必要があります。 次に、 ドラッグされた要素の値をドロップされた場所に転送するには、 方法:{ ドラッグスタート(e,nodeObj){ console.log('🐉ドラッグ移動ポイント',nodeObj.name,); let transData = JSON.stringify(nodeObj) //ドラッグによって渡されたデータはまずJSON形式に変換されます e.dataTransfer.setData("node", transData) }, ドラッグオーバー(e){ e.preventDefault() }, ドロップ(e,nodeObj){ console.log('🐉dropped to',nodeObj.name); getData = JSON.parse( e.dataTransfer.getData("node")) とします。 console.log('データを取得',getData); } } これを踏まえて、次にやるべきことは、取得したドラッグポイントデータを配置ポイントの バスフォルダを作成し、新しいindex.jsファイルを作成します。 「vue」からVueをインポートします 定数busEvent = 新しいVue({ データ(){ 戻る { dragNodeIndex:-1, //親ノードの子配列内のドラッグノードのインデックス } }, 作成された(){ this.$on("transDragNodeIndex", res=>>/$on を通じて $emit を監視するには、カスタム イベントがトリガーされる前に監視されていることを確認する必要があります。つまり、サブスクリプションがパブリッシュに先行します。そうしないと、データを監視できません。私は eventBus をあまり使用していないので、これは落とし穴です。this.dragNodeIndex=res }) } }) デフォルトの busEvent をエクスポートする コンポーネントに 次のステップは、いくつかの論理的判断を下すことです。たとえば、親ノードを子ノードにドラッグできない場合は、まず親ノード上のすべての子ノードの名前を再帰的に走査して配列に格納します。ドロップ位置の ifFatherDragToSon(dragObj,dropObj){//親ノードが子ノードに移動したかどうかを判断しますif (dragObj.children.length === 0) false を返します。 newArr = [] とします。 関数 getAllName(dragObj) { 新しいArr.push(...dragObj.children); (dragObj.children.length === 0)の場合{ 戻る; } それ以外 { (i = 0 とします; i < dragObj.children.length; i++) { getAllName(dragObj.children[i]); } } } getAllName(ドラッグオブジェクト); newArr.includes(dropObj) の場合 { true を返します。 } false を返します。 }
自分自身にドラッグしても機能せず、直接戻るだけです。 「Li Hu Chong」ポイントの下に子ノードが追加されます。これは主に、 もう一つ特筆すべきは、ドラッグイベントの コード接続 以上がVueのドラッグ可能なツリー構造図の実装の詳細内容です。Vueのツリー構造図の実装の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Mysql 5.7.19 無料インストール バージョンで遭遇した落とし穴 (コレクション)
目次レプリケーション ロジックの簡単な概要:遅延の原因と解決策〇メインデータベースへの頻繁なDMLリ...
環境設定1: MySQLをインストールし、MySQLのbinディレクトリを環境変数に追加する環境設定...
この記事では、Ubuntu 18.04でのVMware Toolsのインストールと設定について記録し...
コンテナ間の通信1. コンテナのネットワーク共有このモードの Docker コンテナはネットワーク ...
まず関数の自己呼び出しを知る必要がある関数の自己呼び出し - 自己呼び出し関数1 回限りの関数 - ...
目次1. 使用2. メッセージポップアップウィンドウが繰り返し表示される問題を解決する1. 使用Vu...
この記事の例では、画像のドラッグアンドドロップ機能を実現するためのVueの具体的なコードを参考までに...
私はフロントエンド プロジェクトの開発に常に vscode を使用してきたため、現在ではいくつかの小...
昨年、この公開書簡は大ヒットし、羅永浩氏を驚かせた。今日、著者が新しい章を発表するとは思ってもみなか...
<br />以前、「コンテンツページ番号のプレビューナビゲーション」と「写真プレビューナ...
いいえnvmはnodejsの複数のバージョンを管理する役割を担っています。インストール: https...
目次データ列を分離するプレフィックスインデックスとインデックスの選択性データ列を分離するMySQL ...
この記事では、アバター変更機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...
表の構造は以下のとおりです。記事数は690件のみです。 記事テーブル article(id,titl...
1. ファイルサーバーについてプロジェクトでは、公開ソフトウェアやデータをプロジェクト チーム メン...