vue+tsは要素のマウスドラッグの効果を実現します

vue+tsは要素のマウスドラッグの効果を実現します

この記事の例では、要素のマウスドラッグ効果を実現するためのvue+tsの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

成果を達成する

関連する使用属性

// clientX はブラウザの左上隅を基準としたマウスの x 軸座標です。スクロール バーによって変化しません。
// clientY ブラウザの左上隅を基準としたマウスの y 軸上の座標。スクロール バーによって変化しません。
// element.offsetTop は、要素と上部または上部コントロール間の距離 (整数、単位ピクセル) を示します。
// element.offsetLeft は、左または上のコントロールからの要素の位置 (整数、単位ピクセル) を参照します。
// element.offsetWidth は要素コントロール自体の幅 (整数、単位ピクセル) を参照します。
// element.offsetHeight は要素コントロール自体の高さ (整数、単位ピクセル) を参照します。
// clientHeigh = 高さ + 上部と下部のパディング
// clientWidth = 幅 + 左右のパディング

完全なコードを実装する

<テンプレート>
  <div class="to-do-list" ref="parentBox">
    <div class="検索タイトル">
      <h1 class="add-bold left-box" style="margin-left:35px">
        <a-icon type="unordered-list" style="margin-right: 10px;" />要素のドラッグ</h1>
    </div>
    <a-button ref="moveBtn" style="width: 100px;height: 40px;transition:none" class="move-btn" type="primary"
      >ドラッグボタン</a-button
    >
  </div>
</テンプレート>

<script lang="ts">
'vue-property-decorator' から { Component、Emit、Inject、Prop、Ref、Vue、Watch } をインポートします。

@成分({
  コンポーネント: {},
})
エクスポートデフォルトクラス BriberyInformation は Vue を拡張します {
  @Ref() 読み取り専用で移動Btn;
  @Ref() 読み取り専用の親ボックス。

  btnDown() {
    let box = this.moveBtn.$el; //ボタンのボックスのDOM要素を取得します。let parentBox = this.parentBox; //ボタンの親DOM要素を取得します。let parentH = parentBox.clientHeight; //ボタンの親要素の高さを取得します。
    let parentW = parentBox.clientWidth; //ボタンの親要素の幅を取得する

    x, y とします。
    let moveX, moveY; //移動距離let maxX, maxY; //最大移動距離let isDrop = false;

    ボックス.onmousedown = e => {
      x = e.clientX - box.offsetLeft; // e.clientX はブラウザの左上隅の x 軸に対するマウス座標 - ボタン上部のコントロールの位置 y = e.clientY - box.offsetTop;
      isDrop = true;
    };
    ドキュメント.onmousemove = e => {
      if (isDrop) {
        e.preventDefault();
        moveX = e.clientX - x; // 左側からの移動距離を取得します。 moveY = e.clientY - y; // 上からの移動距離を取得します。 // 最大移動距離 maxX = parentW - box.offsetWidth;
        maxY = 親H - ボックスのオフセット高さ;

        // 有効移動距離の計算 //console.log(Math.min(-1, 4, 6, 12)); // 出力 -1----- 複数のパラメーター、最小値を返す moveX = Math.min(maxX, Math.max(0, moveX));

        移動Y = Math.min(maxY, Math.max(0, 移動Y));
        box.style.left = moveX + 'px';
        box.style.top = moveY + 'px';
      } それ以外 {
        戻る;
      }
    };
    ドキュメント.onmouseup = e => {
      e.preventDefault();
      isDrop = false;
    };
  }

  マウント() {
    this.btnDown();
  }
}
</スクリプト>
<style スコープ lang="less">
.to-doリスト{
  位置: 相対的;
  最小高さ: 600px;
  最大高さ: 600px;
  幅: 600ピクセル;
  オーバーフロー: 非表示;
  境界線: 2px 黒一色;
  .move-btn {
    位置: 絶対;
  }
}
</スタイル>

参照元: JavaScript を使用して div のマウス ドラッグ効果を実装する

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

以下もご興味があるかもしれません:
  • Vue グローバルカスタム命令要素ドラッグ実装コード
  • Vuejsはドラッグすることで要素の幅を変更することで適応性を実現します。
  • 要素のドラッグを実装するための Vue カスタム命令に関する詳細なコード

<<:  XHTML タグのネスト規則の分析

>>:  CSS を使用して 3 つのステップでショッピング モールのカード クーポンを作成する

推薦する

Alibaba Cloud ECS centos6.8 に MySql5.7 をインストールして設定するチュートリアル

Alibaba Cloud yum コマンドでのデフォルトの MySQL バージョンは 5.17**...

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

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

docker に基づいて nginxssl 設定を開始する

前提条件クラウドサーバー(Alibaba Cloud、Tencent CloudなどのcentOS)...

シングルサインオン制御を実装するためのVueの完全なコード

参考までに、Vue シングル サインオンのデモをご紹介します。詳細を知りたい方のお役に立てれば幸いで...

MySQL マルチバージョン同時実行制御 MVCC の基本原理の分析

目次1 トランザクションの同時実行で発生する問題1.1 ダーティリード1.2 繰り返し不可能な読み取...

nginx「504 ゲートウェイタイムアウト」エラーを解決する

ウェブサイトを作成する学生は、アクセス時に一部の nginx サーバーが 504 Gateway T...

Javascript 構造化代入の詳細

目次1. 配列の分解2. オブジェクトの分解3. 不完全な解体4. 分割代入を使用して変数交換を実装...

WeChatミニプログラム公式顔認証の詳しい説明

ミニプログラムはユーザーの個人情報を収集してアップロードしましたが、拒否されました。こんにちは、ミニ...

Tomcatにデプロイされたアプリケーションがフロントエンドページにアクセスできない問題について

最近、実践的なトレーニング プロジェクトを実行する際に ssm フレームワークを使用しました。プロジ...

ページリファクタリングスキル - コンテンツ

雑談はここまでにして、インターネット上で見つかる高性能な Yahoo ウェブサイトを構築するための数...

vue+element テーブルで動的な列フィルタリングを実装するためのサンプルコード

要件: データをリスト形式で表示する場合、表示すべき情報項目が多く、表が横に長くなってしまいます。表...

シンプルで簡単なJavaScript開発のためのSvelte実装原理の詳細な説明

目次デモ1フラグメントの作成スヴェルトコンポーネント状態を変更できるデモSvelte は長い間存在し...

VUEプロジェクトでXSS攻撃に遭遇した実体験

目次序文原因を発見するカスタムフィルタリングルール要約する序文インターネットの急速な発展に伴い、情報...

MySQLデータベースのマスタースレーブ同期構成と読み取り書き込み分離

MySQL マスター スレーブ レプリケーションを使用する利点は次のとおりです。 1. 安定性を向上...

CentOS 7.x dockerはoverlay2ストレージ方式を使用する

/etc/docker/daemon.json を編集し、以下を追加します。 { "ストレ...