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 のスケジュールバックアップを実装する方法

推薦する

MySQLのレプリケーションの詳細な分析

1.MySQLレプリケーションの概念これは、プライマリ データベースの DDL および DML 操作...

CSS のオーバーフロー:hidden エラーの解決方法

失敗の原因今日、カルーセルを書いていたときに、overflow;hidden; が失敗する可能性があ...

4種類のMySQL接続とマルチテーブルクエリの詳細な説明

目次MySQL 内部結合、左結合、右結合、外部結合、複数テーブルクエリビルド環境: 1. 内なる慈恩...

MySQL 無料インストール版 (zip) のインストールと設定の詳細なチュートリアル

この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...

JSを段階的に学ぶ方法についての簡単な説明

目次概要1. jsの位置づけを明確に理解する2. 明確な学習パス3. 自己規律と粘り強さ4. 練習し...

MySQL インデックスの正しい使い方とインデックスの原理の詳細な説明

1. はじめになぜインデックスが必要なのでしょうか?一般的なアプリケーション システムでは、読み取り...

Js でオブジェクトのディープ オブジェクトを安全に取得するメソッドの例

目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...

nginx.conf のルートディレクトリ設定の詳細な説明

nginx.conf を構成するときには常に何らかの問題が発生します。ここでは、よくある問題とその解...

VMware Workstation Pro でサーバー仮想マシンを構築する (グラフィック チュートリアル)

私が使用している VMware Workstation Pro のバージョンは次のとおりです。 1....

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通...

Tomcat の 404 エラーの解決方法の詳細な説明

Tomcat テストで 404 問題が発生します。問題は次のとおりです。 HTTP ステータス 40...

MySQL 5.1 のパスワードを変更し、MySQL データベースにリモートでログインする方法

mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...

Vue 日付時刻ピッカーコンポーネントの使い方の詳細な説明

この記事の例では、Vue の日付時刻ピッカーコンポーネントの具体的なコードを参考までに紹介します。具...

初心者でもjsのtypeofとinstanceofの違いを理解できます

目次1. 型2. インスタンス3. 違い1. 型typeof 演算子は、評価されていないオペランドの...

JSはマップを使用してdouble配列を統合します

目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...