ドラッグ効果を実現するための js オブジェクト指向メソッド

ドラッグ効果を実現するための js オブジェクト指向メソッド

この記事では、ドラッグアンドドロップをJSオブジェクト指向で実装するための具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

ドラッグ機能の実装原理: (直接取り除きます!)

<!DOCTYPE html>
<html lang="ja">

<ヘッド>
  <メタ文字セット="UTF-8">
  <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
  <meta http-equiv="X-UA-compatible" content="ie=edge">
  <title>ドキュメント</title>
  <スタイル>
    #箱 {
      位置: 絶対;
      左: 100px;
      上: 100px;
      幅: 100ピクセル;
      高さ: 100px;
      背景: 赤;
    }

    #ボックス2 {
      位置: 絶対;
      左: 200px;
      上: 200px;
      幅: 100ピクセル;
      高さ: 100px;
      背景: 緑;
    }
  </スタイル>
</head>

<本文>
  <div id="box">テキスト</div>
  <div id="box2">テキスト</div>
</本文>
<スクリプト>
  クラスドラッグ{
    マウスを起動します。
    開始El = {};
    #el = null;
    コンストラクタ(el, オプション) {
      this.#el = el;
      this.option = オプション;
      これを開始();
    }
    始める() {
      移動 = (e) => {
        this.move(e)
      }
      this.#el.addEventListener('mousedown', (e) => {
        this.startMouse = {
          x: e.clientX、
          y: e.clientY,
        }
        this.ondragstart && this.ondragstart(e)
        this.startEl = this.getOffset();
        document.addEventListener('mousemove', 移動);
        document.addEventListener('mouseup', (e) => {
          document.removeEventListener('mousemove', 移動);
          this.end(e);
        }, {
          一度: 真
        })
        e.preventDefault();

      })
    }
    移動する{
      nowMouse = {
        x: e.clientX、
        y: e.clientY,
      }
      disMouse = {
        x: nowMouse.x - this.startMouse.x、
        y: nowMouse.y - this.startMouse.y
      }
      this.ondrag && this.ondrag(e)
      this.setOffset(マウスを離す)
    }
    終了(e) {
      this.ondragend && this.ondragend(e)
    }
    オフセット取得() {
      戻る {
        x: parseFloat(getComputedStyle(this.#el)["left"]),
        y: parseFloat(getComputedStyle(this.#el)["top"])
      }
    }
    setOffset(dis) {
      this.#el.style.left = this.startEl.x + dis.x + 'px'
      this.#el.style.top = this.startEl.y + dis.y + 'px'
    }
  }
  box = document.querySelector("#box"); とします。
  box2 を document.querySelector("#box2") とします。
  d = new Drag(box); とします。
  d2 = new Drag(box2); とします。
  clonex = null とします。
  d2.ondragstart = (e) => {
    clonex = box2.cloneNode(true);
    document.body.appendChild(クローン)
    box2.style.不透明度 = 0.5
  }
  d2.ondragend = () => {
    document.body.removeChild(clonex);
    box2.style.不透明度 = 1
  }
</スクリプト>

</html>

最終的な効果(ドラッグされたブロックは緑のブロックです)

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

以下もご興味があるかもしれません:
  • JavaScriptのオブジェクト指向プログラミングを見てみましょう
  • JavaScript オブジェクト指向の実践の詳細説明: カプセル化とオブジェクトのドラッグ
  • JavaScript オブジェクト指向プログラミングの詳細な説明 [クラス作成、インスタンスオブジェクト、コンストラクタ、プロトタイプなど]
  • JavaScript オブジェクト指向のコア知識と概念の要約
  • JavaScriptオブジェクト指向の7つの基本原則の詳細な例
  • JavaScriptのオブジェクト指向をご存知ですか?

<<:  Ubuntu 18仮想マシンのクローン作成後に同じIPアドレスになる問題の解決方法

>>:  Xampp サーバーで MySQL パスワードを変更する方法 (画像付き)

推薦する

リンクされた画像をダウンロードしてアップロードするJavaScriptの実装

写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正...

Angular CDK を使用してサービスポップアップトーストコンポーネント機能を実装する

目次1. 環境設備2. ToastコンポーネントとToastServiceを作成する2.1 Toas...

js におけるイベントバブリングとイベントキャプチャの簡単な分析

目次01-イベントバブリング1.1- イベントバブリングの概要1.2-イベントバブリングの利用(イベ...

Vueは、商品の数を制御するためのコンポーネントのパッケージ化と使用を実装します。

Vueのコントロール商品数量コンポーネントのカプセル化と使用は参考までに。具体的な内容は以下のとお...

あなたを救うために、私のテーブルは何を使えばいいでしょうか (Haiyu Blog)

テーブルはかつて、Web ページの開発、つまりレイアウトにおいて非常に重要な役割を果たしていました。...

TypeScriptのインストールと使用方法と基本的なデータ型

最初のステップはTypeScriptをグローバルにインストールすることですnpmを使用してインストー...

MySQL sql99構文の内部結合と非等価結合の詳細な説明

#事例: 従業員の給与水準を照会する 選択 給与、等級 から 従業員 参加する ジョブグレード g ...

MySQL ルートパスワードを変更する 4 つの方法 (要約)

方法1: SET PASSWORDコマンドを使用するまずMySQLにログインします。フォーマット: ...

Docker コンテナのログを表示およびクリーンアップする方法 (テスト済みで効果的)

1. 問題Docker コンテナのログにより、ホストのディスク領域がいっぱいになりました。 doc...

Tomcatの各ポートの機能の詳細な説明

tomcat 設定ファイルから、tomcat の起動時にデフォルトで 8080 (8443)、800...

Vue Element フロントエンドアプリケーション開発の動的メニューとルーティングの関連付け処理

目次概要1. メニューとルーティング処理2. メニューとルートリスト3. ログインプロセスの処理概要...

MySQL のストレージ エンジンの違いと比較

MyISAM ストレージエンジンMyISAM は ISAM ストレージ エンジンに基づいており、それ...

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が...

CentOS 6.8 に MySQL 8.0.18 をインストールするチュートリアルの簡単な分析 (RPM 方式)

今日は、CentOS 6.8 サーバーに MySQL 8.0.18 をインストールする方法を記録しま...

ウェブページのエクスペリエンス: ウェブページのカラーマッチング

<br />ウェブページの色はウェブサイトのイメージを確立する鍵の一つですが、ネットユー...