ドラッグ効果を実現するための 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 パスワードを変更する方法 (画像付き)

推薦する

CSSはリモコンのボタンを模倣する

注: このデモはミニプログラム環境でテストされており、他の h5 および pc Web ページにも適...

MySQL 5.7.23 バージョンのインストールチュートリアルと設定方法

MySQL を自分でインストールするのに 3 時間かかりました。チュートリアルはたくさんあるにもかか...

iframe タグの使用方法の詳細な説明 (属性、透明度、適応高さ)

1. iframe の定義と使用法iframe 要素は、別のドキュメントを含むインライン フレーム...

MySQL のロックとトランザクションの簡単な分析

MySQL 自体はファイルシステムに基づいて開発されましたが、ロックの存在が異なります。データベース...

MySQL でよく使用されるステートメントの包括的な概要 (必読)

以下にまとめたナレッジポイントはどれもよく使われる貴重な情報ばかりですので、ぜひ上手に集めてください...

Tomcat を IDEA にダウンロード、インストール、デプロイするチュートリアル (IDEA の 2 つのホット デプロイ設定方法付き)

目次Tomcat ダウンロードチュートリアルTomcat インストールチュートリアルTomcat の...

Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?

序文ご存知のとおり、nginx 構成ファイルは add_header ディレクティブを使用して応答ヘ...

MySQL ストアド プロシージャで月ごとにテーブルを作成する方法

詳細には立ち入らずに、コードに直接進みましょう。一緒にコミュニケーションを取り、学びましょう。月ごと...

Linuxコマンドunzipの詳しい説明

目次1. 解凍コマンド1.1 構文1.2 オプション2. 例1. 解凍コマンドunzip コマンドは...

MySQL の count()、group by、order by の詳細な説明

最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...

InnoDB エンジンのパフォーマンスを最適化するための my.cnf パラメータ構成

私はインターネット上で数え切れないほどの my.cnf 構成を読みましたが、言及されている構成のほと...

ノードスクリプトで自動サインインと抽選機能を実現

目次1. はじめに2. 準備3. スクリプトプロジェクトの構築4. コードの作成と実行5. まとめと...

Vueデータ割り当て問題の解決

私が長い間遭遇してきた問題を要約してみましょう。プロジェクトでは、フロントエンドをレンダリングするた...

フォント宝庫 50 種類の素晴らしい無料英語フォントリソース パート 1

デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...

Javascript での JSBridge に関する予備的研究

目次JSBridgeの起源JSBridgeの双方向通信原理JSはネイティブを呼び出すネイティブコール...