最近、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 無料インストール バージョンで遭遇した落とし穴 (コレクション)
1. Docker Secretとは1. シナリオ表示MySQL サービスなど、一部のサービスではパ...
フロントエンドの初心者として、私は数日間フロントエンドをいじってみました。 。今日、私は自分が固く信...
最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...
一般的な基本グラフィックと私が遭遇するいくつかの小さなアイコンについて簡単に説明します。以下は CS...
目次導入1. 事例の概要2. 環境の展開3. Nginxホストのインストール4. Tomcatのイン...
前回の記事では、Zabbix のネットワーク検出機能について学習し、アクションと組み合わせてホストの...
Docker は、ブリッジ、ホスト、オーバーレイなどの複数のネットワークを提供します。同じ Dock...
1. 本番環境でMySQLのデッドロックを監視し、デッドロックの可能性を減らす方法まず、デッドロック...
一般的なNginx構成ではクロスドメインが可能 サーバー{ 11111 を聞いてください。 serv...
序文: Webサービスを提供するために、Alibabaクラウドホストを新しくインストールしました。す...
1. css: ドラッグテーブル.css @charset "UTF-8"; ....
目次初期ビューVue開発環境の構築Vueインスタンスの作成Vue テンプレート構文Vue データバイ...
目次導入始めるReact Nativeゲームエンジンの簡単な紹介React Nativeでスネークゲ...
目次構成nfs サーバー (nfs.skills.com) nfs クライアント (client.s...
この記事では、25 の有名な Web サイト (Google、Yahoo、Twitter、Digg ...