jsドラッグ効果の原理と実装

jsドラッグ効果の原理と実装

ドラッグ機能は主に、ドラッグによる並べ替え、ポップアップ ボックスのドラッグと移動など、ユーザーがカスタマイズされたアクションを実行できるようにするために使用されます。

ドラッグアンドドロッププロセスアクション

1. マウスを押すとonmousedownイベントがトリガーされます

2. マウスの動きがonmousemoveイベントをトリガーする

3. マウスを離すとonmouseupイベントがトリガーされます

抗力原理

1. マウスの押下 + マウスの移動 = ドラッグ ------- イベント onmousedown + onmousemove

2. マウスを離す = ドラッグなし -------- マウスを離すとドラッグが停止します

3. マウスオフセット = ドラッグ距離

DOM をクリックすると、現在のマウス座標、つまり x 値と y 値、およびドラッグされた DOM の上と左の値を記録し、マウスが押されたコールバック関数にマウス移動イベントを追加します。

document.addEventListener("mousemove", 移動中, false)

マウスアップイベントを追加します

document.addEventListener("mouseup",function() {
document.removeEventListener("mousemove", 移動中, false);
}、 間違い);

このリフト イベントは、マウスの動きの監視をキャンセルするために使用されます。ドラッグはマウスが押されているときにのみ実行でき、マウスを離すと動きが停止するためです。

マウスを押して動かすと、動きの x 値と y 値が記録され、ドラッグされた DOM の上と左の値は次のようになります。
top = マウスが押されたときに記録された DOM の上の値 + (移動中の y 値 - マウスが押されたときの y 値)
left = マウスが押されたときに記録された DOM の左の値 + (移動中の x 値 - マウスが押されたときの x 値);

// 非常にシンプルなバージョン var div = document.querySelector("div");
    // 押されたときにドキュメント内のマウス移動イベントのリッスンを開始します // マウスのリリースイベントのリッスンを開始します // 押されたときにのみドラッグを準備します div.onmousedown=function(e1){
        // マウスがドキュメント内を移動しても、div 上では移動できません。マウスが div から離れてしまうと、div をドラッグできなくなります。onmousemove=function(e){
            // マウスが動くと、要素の左上とビューポートを基準とした現在のマウス座標が割り当てられます。
            // 押された位置でドラッグする必要があるため、キーが押されたときに div を基準としたマウスの左上隅の位置も取得する必要があります。 // マウスが押された位置でドラッグされるようにするには、現在のマウスの位置から相対要素の左上隅の位置を引いた値を使用します。 div.style.left=e.clientX-e1.offsetX+"px";
            div.style.top=e.clientY-e1.offsetY+"px";
        }
        // マウスボタンが放されたら、マウス移動イベントを削除し、マウス解放イベントを削除します div.onmouseup=function(){
            ドキュメント.onmousemove=null;
            ドキュメント.onmouseup=null;
        }
    }

//シンプルバージョン var div = document.querySelector("div");
    var オフセットX、オフセットY;
    div.addEventListener("mousedown",mouseDownHandler);

    関数mouseDownHandler(e){
        オフセットX=e.オフセットX
        オフセットY=e.オフセットY
        document.addEventListener("mousemove",mousemoveHandler)
        document.addEventListener("mouseup",mouseupHandler)
    }

    関数mousemoveHandler(e){
        div.style.left=e.clientX-offsetX+"px"
        div.style.top=e.clientY-offsetY+"px"
    }

    関数mouseupHandler(e){
        document.removeEventListener("mousemove",mousemoveHandler)
        document.removeEventListener("mouseup",mouseupHandler)
    }

// シンプルなアップグレードバージョン var div = document.querySelector ("div");
    var オフセットX、オフセットY;
    div.addEventListener("mousedown",mouseHandler);

    関数mouseHandler(e){
        if(e.type==="mousedown"){
            オフセットX = e.offsetX;
            オフセットY=e.offsetY;
            document.addEventListener("mousemove",mouseHandler)
            document.addEventListener("mouseup",mouseHandler)
        }それ以外の場合(e.type==="mousemove"){
            div.style.left=e.clientX-offsetX+"px"
            div.style.top=e.clientY-offsetY+"px"
        }それ以外の場合(e.type==="mouseup"){
            document.removeEventListener("mousemove",mouseHandler)
            document.removeEventListener("mouseup",mouseHandler)
        }
}

注記

a. ドラッグされた要素のスタイルを有効にするには、絶対位置または相対位置に設定する必要があります。
b. ドキュメントにドラッグアンドドロップします。そうしないとコンテンツが切り離されます。

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

以下もご興味があるかもしれません:
  • JQuery ダイアログ (JS モーダル ウィンドウ、ドラッグ可能な DIV)
  • Sortable.js ドラッグアンドドロップソートの使い方の分析
  • ドラッグ効果を実現するjs
  • JavaScript でモバイル端末のタッチスクリーンドラッグ機能を実装
  • js を使用して実装されたシンプルなドラッグ効果
  • JS は美しいウィンドウのドラッグ効果を実現します (サイズの変更、最大化、最小化、閉じるなど)
  • JS で実装したファイルのドラッグ アンド ドロップ アップロード機能の例
  • JavaScript を使用してマウス ドラッグ イベントを実装する
  • JS コンポーネント Bootstrap Table テーブル行ドラッグ効果実装コード
  • JavaScript は水平方向のプログレスバーのドラッグ効果を実装します

<<:  MySQL 関数インデックス最適化ソリューション

>>:  Linux で MySQL のスケジュールバックアップを実装する方法

推薦する

Angularデータバインディングとその実装の詳細な説明

目次序文データバインディングとは何ですか? Angular のデータバインディングの種類一方向データ...

Vueはカードフリップ効果を実現します

この記事では、カードフリップ効果を実現するためのVueの具体的なコードを例として紹介します。具体的な...

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

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

Centos7 に yum を使用して MySQL をインストールし、リモート接続を実現する方法

Centos7はyumを使用してMySQLをインストールし、リモート接続を実現する方法です。MySQ...

hrefパラメータ転送における中国語の文字化けについて

パラメータを渡すために href が必要で、パラメータが中国語の場合、文字化けした文字が表示されます...

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

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

MYSQL大規模書き込み問題の最適化の詳細な説明

概要: MySQL のパフォーマンス最適化について話すとき、誰もがクエリ パフォーマンスを向上させる...

Linux がますます人気になっている 10 の理由

Linux はますます多くのユーザーに愛されてきました。なぜ Linux はこれほど急速に発展し、い...

tomcat ログ ディレクトリ内のログ ファイルの分析 (概要)

tomcat が起動されるたびに、次のログ ファイルがログ ディレクトリに自動的に生成され、日付順...

JavaScript セレクター関数 querySelector および querySelectorAll

目次1. querySelectorは単一の要素を照会する1. ドキュメントインスタンスの呼び出し2...

Dreamweaver8を使用してウェブサイトのファイルをチェックして整理する方法

Dreamweaver8 を使用して独自の Web サイトを作成する目的は何ですか?インターネットに...

MySQL で主キーと ROWID を使用する際の落とし穴の概要

序文MySQL の rowid の概念については聞いたことがあるかもしれませんが、テストや実践が難し...

MySQLは遅いSQLを開始し、原因を分析します

ステップ1. MySQLスロークエリを有効にする方法1: 設定ファイルを変更するWindows: W...

CentOS 7 で Docker のポート転送をファイアウォールと互換性のあるように設定する方法

CentOS 7 では、次のようなコマンドを使用してホスト ポートをコンテナー ポートにマッピングす...

Spring Boot + jar パッケージングのデプロイメント Tomcat 404 エラーの問題を解決する

1. Spring Boot は jsp jar パッケージをサポートしていません。jsp は wa...