Vueでドラッグ可能なコンポーネントを実装する方法

Vueでドラッグ可能なコンポーネントを実装する方法

この記事では、Vueでドラッグ可能なコンポーネントとドラッグ可能なコンポーネントを実装する方法を参考までに紹介します。具体的な内容は次のとおりです。

説明する:

コンポーネントはドラッグ機能のみをカプセル化し、コンテンツは#header、#default、#footerスロットを通じてカスタマイズされます。

効果:

コード:

<テンプレート>
  <div
    ref="ラッパー"
    クラス="ドラッグバーラッパー"
  >
    <div
      ref="ヘッダー"
      クラス="ドラッグバーヘッダー"
    >
      <!-- ヘッダー領域 -->
      <スロット名="ヘッダー" />
    </div>
    <div class="ドラッグバーコンテンツ">
      <!-- メインコンテンツエリア -->
      <スロット名="デフォルト" />
    </div>
    <div class="ドラッグバーフッター">
      <!-- 下部領域 -->
      <スロット名="フッター" />
    </div>
  </div>
</テンプレート>
 
<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      wrapperDom: null、
      ヘッダーDom: null、
 
      ディスX: 0,
      ディスY: 0,
 
      最小左: 0,
      最大左: 0,
 
      最小トップ: 0,
      最大上: 0,
 
      前へ左: 0,
      前へトップ: 0,
    };
  },
  メソッド: {
    初期化ドラッグ() {
      this.wrapperDom = this.$refs.wrapper;
      this.headerDom = this.$refs.header;
      this.headerDom.addEventListener('mousedown', this.onMousedown, false);//ヘッダー領域をクリックしてドラッグします},
    マウスダウン時(e) {
      this.disX = e.clientX - this.headerDom.offsetLeft;
      this.disY = e.clientY - this.headerDom.offsetTop;
 
      this.minLeft = this.wrapperDom.offsetLeft;
      this.minTop = this.wrapperDom.offsetTop;
 
      this.maxLeft =
        window.innerWidth - this.minLeft - this.wrapperDom.offsetWidth;
      this.maxTop =
        window.innerHeight - this.minTop - this.wrapperDom.offsetHeight;
 
      const { left, top } = getComputedStyle(this.wrapperDom, false);
      this.prevLeft = parseFloat(left);
      this.prevTop = parseFloat(top);
 
      document.addEventListener('mousemove', this.onMousemove, false);
      document.addEventListener('mouseup', this.onMouseup, false);
      document.body.style.userSelect = 'none'; //ドラッグ中に選択したテキストの干渉を排除します},
    マウスを動かすと(e) {
      left = e.clientX - this.disX とします。
      top = e.clientY - this.disY とします。
 
      if (-left > this.minLeft) {
        左 = -this.minLeft;
      } そうでない場合 (left > this.maxLeft) {
        左 = this.maxLeft;
      }
 
      if (-top > this.minTop) {
        上 = -this.minTop;
      } そうでない場合 (top > this.maxTop) {
        上 = this.maxTop;
      }
 
      this.wrapperDom.style.left = this.prevLeft + left + 'px';
      this.wrapperDom.style.top = this.prevTop + top + 'px';
    },
    マウスアップ時() {
      document.removeEventListener('mousemove', this.onMousemove, false);
      document.removeEventListener('mouseup', this.onMouseup, false);
      document.body.style.userSelect = 'auto'; //テキストを選択可能に戻す},
  },
  マウント() {
    this.initDrag();
  }
};
</スクリプト>
 
<スタイルスコープ>
.ドラッグバーラッパー{
  位置: 固定;
  zインデックス: 2;
  上位: 50%;
  左: 50%;
  変換: translate(-50%, -50%);
  ディスプレイ: フレックス;
  flex-direction: 列;
}
.ドラッグバーヘッダー{
  背景色: #eee;
  カーソル: 移動; /*マウスドラッグスタイル*/
}
.ドラッグバーコンテンツ{
  背景色: #fff;
}
.ドラッグバーフッター{
  背景色: #fff;
}
</スタイル>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue は div の高さをドラッグ可能にします
  • Vueはドラッグ可能なダイアログボックスを実装します
  • Vue の一時停止されたドラッグ可能なフローティング ボタンのサンプル コード
  • Vueは、element-uiダイアログボックスのドラッグ可能な機能を実装します。
  • Vue プロジェクトで el-dialog コンポーネントのドラッグ可能な効果を実装する

<<:  Linuxのtimeコマンドの使い方の詳しい説明

>>:  数百万のデータボリュームに対する MySQL ページングクエリ方法とその最適化の提案

推薦する

HTML フレーム、Iframe、フレームセットの違い

10.4.1 フレームセットとフレームの違い まず、フレームセットとフレームの違いについて説明します...

MySQL のスロークエリの方法と例

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

MySQL 変数宣言とストアド プロシージャの分析

変数の宣言グローバル変数の設定@a='新しい変数' を設定します。関数やストアドプロ...

MySQL でテーブルスペースの断片化を解消する詳細な例

MySQL でテーブルスペースの断片化を解消する詳細な例断片化の原因(1)テーブルのストレージは断片...

下線を実現するための CSS3 トランジションの例コード

この記事では、下線を実現するための CSS3 トランジションのサンプル コードを紹介します。このコー...

React+TS を使用したシンプルな Jira プロジェクトを実装するためのベスト プラクティス

トレーニングのための一連のプロジェクト反応+ts内容は少ないですが、フックのカプセル化、ts ジェネ...

複数サーバーの負荷分散を実現するためのNginx構成

Nginx ロード バランシング サーバー: IP: 192.168.0.4 (Nginx-Serv...

Dockerを使用してブログサイトを素早く構築する方法の詳細な説明

目次1. 準備2. 展開プロセス3. アクセステストHalo は、ブログに慣れている学生に追加のオプ...

メンテナンスしやすい CSS コードを書くための 5 つのガイドライン

1. スタイルシートの先頭にコメント ブロックを追加して、スタイルシートの作成日、作成者、タグ、その...

CentOS7でPHPスケジュールタスクを実行する方法

序文この記事は主に CentOS7 で PHP スケジュールタスクを実行することに関する関連コンテン...

ccs3に基づくタイムライン実装方法

Web プロジェクトでは、タイムライン コントロールをよく使用します。この記事では、項目ごとに展開で...

DockerでSpringbootプロジェクトを実行する方法

1. IDEAの下にあるターミナルをクリックし、mvn clean installと入力します。 次...

MySQL explain クエリ命令情報の取得原理と例

explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法次のように、sele...

Linux の一般的な基本コマンドと使用方法

この記事では、一般的な基本的な Linux コマンドとその使用方法を例を使って説明します。ご参考まで...

Sublime Text - ブラウザのショートカットキーを設定するための推奨方法

コード効果を異なるブラウザで表示することはよくあることなので、異なるショートカットキーを使用して対応...