1. プラグインまず、私たちが選んだプラグインは npm i vue-grid-layout --save 公式サイト: https://jbaysolutions.github.... 2. 幕間依存関係をインストールした後、プロジェクトを開始できることがわかりました。公式 Web サイトの 考え方を変えて、ローカル インポート コンポーネントの代わりにグローバル インポート コンポーネントを使用します。 3. 実装constレイアウト = ref<LayoutItem[]>([ { x: 0, y: 0, 幅: 1, 高さ: 1, 自: 0 }, { x: 1, y: 0, 幅: 2, 高さ: 1, 自: 1 }, { x: 0, y: 1, 幅: 2, 高さ: 1, 自: 2 }, { x: 0, y: 2, 幅: 3, 高さ: 1, 自: 3 }, { x: 2, y: 1, 幅: 1, 高さ: 1, i: 4 }, ]); <グリッドレイアウト :layout="レイアウト" :列番号="3" :行の高さ="240" :ドラッグ可能="true" :is-resizable="true" :is-mirrored="false" :maxRows="3" :vertical-compact="true" :margin="[10, 10]" :use-css-transforms="true" > <グリッド項目 v-for="レイアウト内の項目" :x="アイテム.x" :y="アイテム.y" :w="アイテム.w" :h="アイテム.h" :i="アイテムi" :key="item.i" @moved="onItemMoved" >{{ 項目.i }}</グリッド項目> </グリッドレイアウト> 効果: しかし! ! 考える: 各行が完全に入力されているかどうかを確認するためのチェックを追加する必要があります。 4. 検証機能'../types/index' から LayoutItem をインポートします。 'lodash' から { cloneDeep } をインポートします /** * レイアウトが正しいかどうかを確認します* 1. 元の配列を汚染しないように配列をディープコピーします* 2. トラバーサルのyの最大値を取得します* 3. 各yサブ配列を取得し、xの昇順で並べ替えます* 4. 配列の長さが1の場合、wが最大値xに等しいかどうかを判断します * 5. 配列の長さが 1 でない場合は、配列を走査して、各要素の w が次の要素の x と等しいかどうかを判断します。w を累積して、合計が最大 x と等しいかどうかを判断します。 * 6. 合法であればfalseを返す * @パラメータリスト * @戻り値 */ エクスポートconst verifyLayout = (list: Array<LayoutItem>): boolean => { yList を list.map(item => { return item.y }); yList = yList.sort((a, b) => { return a - b }); console.log(リスト); const newArr = cloneDeep(リスト); フラグを false にします。 定数maxY = yList[yList.length - 1]; 定数maxX = 3; コンソールログ(最大Y); (i = 0; i <= maxY; i++) の場合 { arr = newArr.filter((item: LayoutItem) => { とします。 item.y === i を返します。 }); コンソールにログ出力します。 (arr && arr.length > 1) の場合 { console.log('複数-------------------', i); calValue = 0 とします。 arr = arr.sort((a: LayoutItem, b: LayoutItem) => { return ax - bx }) arr.forEach((childItem: LayoutItem, index: 数値) => { calValue += 子アイテム.w; console.log('calValue--------------', calValue, インデックス); if (index !== arr.length - 1 && calValue !== arr[index + 1].x) { フラグ = true; } if (index === arr.length - 1 && calValue !== maxX) { フラグ = true; } }) } それ以外 { console.log('------------------は1つだけです', i); (arr[0].w !== maxX) の場合 { フラグ = true } } } console.log(フラグ); フラグを返します。 } このアイデアは、機能に関する私のコメントです。 /** * ドラッグ完了イベント* 1. 以前のデータを履歴データに保存します* 2. 次に、移動後のデータをnowlayoutデータに保存します*/ 定数 onItemMoved = () => { console.log('移動しました--------------------') historyDataList.value.push(cloneDeep(nowLayoutData.value)); LayoutData.value を cloneDeep(layout.value); // 定数 flag = verifyLayout(layout.value); // if (フラグ) { // 戻る() // } }; 定数 goBack = () => { console.log(履歴データリストの値[履歴データリストの値の長さ - 1]); layout.value = historyDataList.value[historyDataList.value.length - 1]; LayoutData.value を cloneDeep(layout.value); 履歴データリストの値のポップ(); } このように、ドラッグ アンド ドロップするたびに、検証が正当でない場合はロールバックして、すべての行が入力されていることを確認します。 ! ! ! これで、vue-grid-layout プラグインを使用してドラッグ アンド ドロップ レイアウトを実装する Vue3.0 に関するこの記事は終了です。vue-grid-layout プラグインを使用してドラッグ アンド ドロップ レイアウトを実装する Vue3 に関するその他の関連記事については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
「Tik Tok」も大人気で、ユーザー数は7億人と言われています。今日は、注目を集めるためにTikT...
MySql でリモート接続を許可する方法この目標を達成するには、2つのことを行う必要がある。ユーザー...
この記事では、例を使用して、MySQL データベースのデータ テーブルの最適化、外部キーの使用、およ...
目次1. Tomcatコードをダウンロードする2. ダウンロード後のディレクトリ構造3. ソースコー...
障害の説明percona5.6、mysqldump フルバックアップ、バックアップデータのインポート...
ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...
目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...
まず、私たちがやりたいことは、serverA の usera を使用して、パスワードなしで serv...
この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...
mysqlに接続できない問題の解決方法を参考までに紹介します。具体的な内容は以下のとおりです。昨日は...
序文この記事を書いた主な理由は、チームリーダーが、ブラウザを使用してコンピューターのカメラを呼び出し...
エラーメッセージ:エラー 2002: ソケット '/tmp/mysql.sock' ...
フォームを作成するときに、名前、携帯電話番号、出生地などの 2 つのフィールドを揃える状況に遭遇する...
序文私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉...
ソフィー・ハルダッククライドキー埠頭 37 東ソープボックス Rxバランス EEハーバー対比 SVN...