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 ページングクエリ方法とその最適化の提案

推薦する

Reactは感情を使ってCSSコードを書く

目次導入:感情のインストール:一般的な CSS コンポーネントを追加します。既存のコンポーネントにス...

ドロップダウンリスト選択ボックスを実装するJavaScript

この記事の例では、ドロップダウンリスト選択ボックスを実装するためのJavaScriptの具体的なコー...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル (一般)

MySQLサービス8.0.14のインストール(一般)の参考までに、具体的な内容は次のとおりです。イ...

Linux ファイルを分割するための split コマンドの詳細な説明

いくつかの簡単な Linux コマンドを使用すると、ストレージまたは電子メールの添付ファイルのサイズ...

MySQLでユーザー認証情報を表示する具体的な方法

具体的な方法: 1. コマンドプロンプトを開く2. mysql -u root -pコマンドを入力し...

Nginx を使用してクロスドメイン Vue 開発環境を処理する方法

1. 需要正しい Cookie 配信と SSO テストを確実に実行できるように、ローカル テスト ド...

Linux システムに Zookeeper サービスをインストールする方法

1. /usr/local/services/zookeeper フォルダを作成します。 mkdir...

MySQL の group by に関する簡単な説明

目次1. はじめに2. ユーザーテーブルを準備する2.1 グループ化ルール2.2 グループの使用2....

Node.js を使用して C# のデータ テーブル エンティティ クラス生成ツールを作成する方法

Microsoft は T4 テンプレートを提供していますが、使用するのが非常に難しいと思います。ス...

Win10+Ubuntu 20.04 LTS デュアル システム インストール (UEFI + GPT) (画像とテキスト、複数の画像には注意)

Win10 のインストール (すでにインストールされている場合はスキップしてください) win10...

MySQL の frm ファイルからテーブル構造を復元する 3 つの方法 [推奨]

mysql が正常に実行されている場合、テーブル構造を表示することは難しくありません。しかし、場合...

CSSの複数条件の書き方の詳細説明:

:not疑似クラスセレクターは、式に一致しない要素をフィルタリングできます。例 テーブル tbod...

Vue でルートをジャンプする方法をご存知ですか?

目次最初の方法: router-link (宣言型ルーティング) 2番目の方法: router.pu...

CSS3 はクールな 3D 回転遠近法効果を実現します

CSS3はクールな3D回転パースペクティブを実現します3D アニメーション効果はますます人気が高まっ...

docker で Apollo をデプロイする詳細なチュートリアル

1. はじめにここでは apollo について詳しく説明しません。公式サイト https://git...