JavaScriptのドラッグアンドドロップ
概要:このチュートリアルでは、JavaScriptのドラッグアンドドロップAPIについて学習します。
はじめにJavaScriptへのドラッグアンドドロップAPI
HTML5は正式にドラッグアンドドロップ仕様を導入しました。最近のほとんどのWebブラウザは、HTML5仕様に基づいたネイティブのドラッグアンドドロップを実装しています。
デフォルトでは、画像とテキストのみをドラッグできます。画像をドラッグするには、マウスボタンを押したまま移動します。テキストをドラッグするには、画像をドラッグするのと同じ方法で、テキストを強調表示してドラッグする必要があります。
HTML5仕様では、ほとんどすべての要素をドラッグできるように指定されています。要素をドラッグ可能にするには、値がtrue
のdraggable
プロパティをHTMLタグに追加します。例:
Code language: HTML, XML (xml)
ドラッグ可能な要素のイベント
要素をドラッグすると、これらのイベントは次の順序で発生します。
-
dragstart
-
drag
-
dragend
マウスボタンを押したままマウスを動かし始めると、ドラッグ可能な要素でdragstart
イベントが発生します。あなたがドラッグしていること。カーソルがドロップなしの記号(線が入った円)に変わり、要素をそれ自体にドロップできないことを示します。
dragstart
の後イベントが発生すると、要素をドラッグしている間、drag
イベントが繰り返し発生します。
そしてdragend
イベントが発生します要素のドラッグを停止したとき。
すべてのイベントのターゲット(e.target
)は、ドラッグされている要素です。
デフォルトでは、ブラウザはドラッグされた要素の外観を変更しません。したがって、好みに基づいて外観をカスタマイズできます。
ドロップターゲットのイベント
有効なドロップターゲット上に要素をドラッグすると、これらのイベントは次の順序で発生します。
-
dragenter
-
dragover
-
dragleave
またはdrop
dragenter
イベントがすぐに発生します要素をドロップターゲット上にドラッグすると。
dragenter
イベントが発生した後、dragover
イベントが繰り返し発生します。ドロップターゲットの境界内で要素をドラッグしている限り。
ドロップターゲットの境界の外側で要素をドラッグすると、dragover
イベントが発生を停止し、dragleave
イベントが発生します。
ターゲットに要素をドロップした場合、drop
dragleave
イベントの代わりにイベントが発生します。
ターゲット(
)dragenter
、dragover
、dragleave
、およびdrop
イベントはドロップターゲット要素です。
有効なドロップターゲット
ほとんどすべての要素がドロップターゲットイベントをサポートします(dragenter
、dragover
、dragleave
、およびdrop
)。ただし、デフォルトではドロップは許可されていません。
ドロップを許可しないドロップターゲットに要素をドロップすると、drop
イベントが勝ちました。起動しません。
要素を有効なドロップターゲットに変換するには、dragenter
とdragover
イベントは対応するイベントハンドラーでevent.preventDefault()
メソッドを呼び出します。 (詳細については、サンプルセクションを参照してください)
dataTransferオブジェクトを使用したデータの転送
ドラッグアンドドロップアクションでデータを転送するには、オブジェクト。
dataTransfer
オブジェクトはイベントのプロパティです。ドラッグされた要素からドロップターゲットにデータを転送できます。
dataTransfer
オブジェクトには、setData()
およびgetData()
。
setData()
を使用すると、ドラッグ操作のデータを指定した形式とデータに設定できます。 :
Code language: CSS (css)
形式はtext/plain
またはtext/uri-list
です。また、データは、ドラッグオブジェクトに追加するデータを表す文字列にすることができます。
getData()
メソッドは、メソッド。
getData()
は1つの引数を受け入れます:
形式はtext/plain
またはtext/uri-list
です。 getData()
は、setData()
メソッドによって保存された文字列、またはドラッグ操作にデータが含まれていない場合は空の文字列を返します。
JavaScriptのドラッグアンドドロップの例
JavaScriptのドラッグアンドドロップAPIを示すために、次の簡単なドラッグアンドドロップアプリケーションを開発します。
プロジェクト構造
まず、drag-n-drop-basics
という名前の新しいフォルダを作成します。このフォルダー内に、css
とjs
という2つのサブフォルダーを作成します。
次に、ivという名前の新しいファイルを作成します。 js
フォルダー内のid = “1238f56999″>
、css
内のstyle.css
div>フォルダー、およびdrag-n-drop-basics
フォルダー内のindex.html
。
3番目に、
と、index.html
ファイルのapp.js
にリンクするスクリプトタグは次のようになります:
index.htmlファイルを作成する
index.html
ファイルに次のコードを配置します。
このindex.htmlファイルでは、 .container
要素を使用して見出しとdrop-targets
要素を揃えました。
drop-targets要素内で、同じクラスbox
の3つのdiv
要素を配置しました。そして、最初のボックスにクラスitem
の別のdiv要素を配置します。
index.html
を開いた場合黄色のボックスをドラッグしようとすると、ドラッグできないことを示すカーソルが表示されます:
要素をドラッグ可能にするには、値がtrue
のdraggable
プロパティを追加します。次のようにHTMLタグに追加します。
Code language: JavaScript (javascript)
ここで、index.html
を保存する場合は、ブラウザで開きます。ここでも、次のようにitem要素をドラッグできることがわかります。
ドラッグ可能な要素でイベントを処理する
style.css
ファイルには.hide
があります要素を非表示にするクラス:
Code language: CSS (css)
app.js
ファイルに、次のコードを追加します。
どのように動作:
- まず、
querySelector()
を使用してドラッグ可能な要素を選択します。 - 次に、ドラッグ可能な要素へのイベントハンドラー。
- 3番目に、関数を定義して
dragstart
イベント。
index.htmlファイルを開いてドラッグ可能な要素のドラッグを開始すると、drag starts...
メッセージが表示されます。コンソール。
dragStart
イベントハンドラーで、ドラッグ可能な要素のid
を保存する必要があります。そして、それを非表示にする必要があります:
要素をドラッグすると、ドラッグを開始すると消えることがわかります。
これを解決するには、setTimeout()
関数:
これで、ドラッグ可能な要素を元の位置からドラッグできます:
ドロップターゲットでイベントを処理する
style.cssファイルには
:
Code language: CSS (css)
app.jsでは、次のものが必要です。ドロップターゲット要素を選択し、dragenter
、dragover
、dragleave
、および<これらの要素のdivid = "1e5569308a">
イベント:
dragenter
および
イベントが発生します。 dragleave
およびdrop
イベントが発生したときにスタイルを復元する必要があります。
これを行うには、追加と削除を行いますdrag-over
クラスを次のようにdrop
ターゲットに追加します:
ここで、ドラッグ可能な要素を別のドロップにドラッグすると、ターゲットの場合、次の図に示すように、ドロップターゲットの境界が変更されます。
ドロップターゲットを有効にするには、dragenter
divでevent.preventDefault()
を呼び出す必要があります。 >およびdragover
イベントハンドラーは次のようになります:
これを行わないと、drop
イベントは発生しません。 div
要素はデフォルトでは有効なドロップターゲットではないため、起動します。
ドラッグ可能な要素をドロップターゲットにドラッグすると、カーソルが表示されます。要素を削除できることを示す変更:
これで、item要素をドロップすると、すぐに消えることがわかります。
これを解決するには問題は、drop
イベントのハンドルを追加する必要があります。
- まず、ividの
getData()
メソッドを使用して、ドラッグ可能な要素のid
を取得します。 = “cafe64ce48″>
オブジェクト。
draggable
要素のbec293d4de “> クラス。
次のコードは、完全なdrop
イベントハンドラー:
ドラッグ可能な要素をドラッグアンドドロップすると、期待どおりに機能するはずです。
以下に、完全なapp.jsファイルを示します。
デモへのリンクは次のとおりです。
概要
-
draggable
プロパティに値trueを追加します要素にドラッグできるようにします。 -
dragstart
、drag
、およびdragend
イベントはドラッグ可能な要素で発生します。 -
dragenter
、dragover
、またはdrop
イベントがドロップターゲットで発生します。 - で
event.preventDefault()
を呼び出します。dragenter
およびdragover
イベントハンドラーを使用して、要素を有効なドロップターゲットにします。 - iv id = “を使用しますドラッグアンドドロップ操作でデータを転送するための
setData()
メソッドとgetData()
メソッドを持つf1027dfda3 “>