JavaScript プログラミング講座

 

DataTransfer クラスについて

 


■ DataTransfer クラスについて

 
データを格納するための入れ物として機能します。
 
 

■ DataTransfer オブジェクトを取得する

 
■ドラッグアンドドロップの場合(DragEvent)
 
DragEvent の、dataTransfer プロパティを使用します。
 
ドラッグを開始した時に、DataTransfer オブジェクトを取得する

<html>
  <body>

    <div id="aaa" draggable="true" style="width:400px; height:300px; background:#fcc;"></div>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var element = document.getElementById("aaa");

	// ------------------------------------------------------------
	// ドラッグを開始した時に実行されるイベント
	// ------------------------------------------------------------
	element.ondragstart = function (e){
		if(!e) e = window.event; // レガシー

		// DataTransfer オブジェクトを取得する
		var data_transfer = e.dataTransfer;

		// 出力テスト
		console.log(data_transfer);
	};

    //-->
    </script>

  </body>
</html>
 
■クリップボードの場合(ClipboardEvent)
 
ClipboardEvent の、clipboardData プロパティを使用します。
 
ClipboardEvent から、DataTransfer オブジェクトを取得する

// ------------------------------------------------------------
// コピー操作が行われると実行されるイベント
// ------------------------------------------------------------
window.addEventListener("copy" , function(e){

	// DataTransfer オブジェクトを取得する
	var data_transfer = (e.clipboardData) || (window.clipboardData);

	// 出力テスト
	console.log(data_transfer);

});
 
 

 

データを格納する

 
 


■「コンテンツタイプ」を指定して、文字列データを格納する

 
setData() メソッドを使用します。
 
タイプ名ごとに、1つのデータを格納する事ができます。
 
既にデータが存在する場合は、上書きされます。
 
DataTransfer.setData( format , data ) :Void
第01引数 Stringデータのタイプ名を指定(コンテンツタイプ)
第02引数 Stringデータを指定(文字列)
戻り値 Voidなし
 
■第01引数(データのタイプ名)
 
格納するデータの、コンテンツタイプを指定します。
 
ここで指定できるのは、テキスト関連のみです。
 
サポートしていない場合、ブラウザによってはエラーが発生します。
 
■第01引数(最も互換性のあるタイプ名)
 
InternetExplorer 6 でも動作するタイプ名です。
 
タイプ名説明
"text"プレーンテキスト("text/plain" と同等)
 
■第01引数(HTML5 世代の一例)
 
タイプ名説明
"text/plain"プレーンテキスト
"text/html"HTML 文字列
 

■データを格納する例(ドラッグ開始時)

 
■ドラッグを開始したか監視する
 
ondragstart イベントを使用します。
 
ドラッグ時のイベントについては、こちらで解説しています。
 
■使用例
 
ドラッグ開始時に、データを格納する

<html>
  <body>

    <div id="aaa" draggable="true" style="width:400px; height:300px; background:#fcc;"></div>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var element = document.getElementById("aaa");

	// ------------------------------------------------------------
	// ドラッグを開始した時に実行されるイベント
	// ------------------------------------------------------------
	element.ondragstart = function (e){
		if(!e) e = window.event; // レガシー

		// ------------------------------------------------------------
		// DataTransfer オブジェクトを取得する
		// ------------------------------------------------------------
		var data_transfer = e.dataTransfer;

		// ------------------------------------------------------------
		// テキストデータをセットする
		// ------------------------------------------------------------
		data_transfer.setData( "text" , "テスト文字列です" );

		try{
			// ------------------------------------------------------------
			// 「コンテンツタイプ」を指定して「データ」を格納する(HTML5 世代)
			// ------------------------------------------------------------
			data_transfer.setData( "text/plain" , "テスト文字列です" );
			data_transfer.setData( "text/html"  , "<span>テスト文字列です</span>" );

		}catch(e){
		}

	};

    //-->
    </script>

  </body>
</html>
 

■データを格納する例(クリップボード)

 
■カット/コピー操作が発生したか監視する
 
"cut""copy" イベントを使用します。
 
■使用例
 
コピー操作時に、データを格納する

// ------------------------------------------------------------
// コピー操作が行われると実行されるイベント
// ------------------------------------------------------------
window.addEventListener("copy" , function(e){

	// ------------------------------------------------------------
	// DataTransfer オブジェクトを取得する
	// ------------------------------------------------------------
	var data_transfer = (e.clipboardData) || (window.clipboardData);

	// ------------------------------------------------------------
	// テキストデータをセットする
	// ------------------------------------------------------------
	data_transfer.setData( "text" , "テスト文字列です" );

	try{
		// ------------------------------------------------------------
		// 「コンテンツタイプ」を指定して「データ」を格納する(HTML5 世代)
		// ------------------------------------------------------------
		data_transfer.setData( "text/plain" , "テスト文字列です" );
		data_transfer.setData( "text/html"  , "<span>テスト文字列です</span>" );

	}catch(e){
	}

	// ------------------------------------------------------------
	// デフォルトのコピー操作を無効化
	// ------------------------------------------------------------
	e.preventDefault();
});
 
 

 

データを取得する

 
 


■「コンテンツタイプ」を指定して、文字列データを取得する

 
getData() メソッドを使用します。
 
タイプ名ごとに、1つのデータが格納されています。
 
DataTransfer.getData( format ) :String
第01引数 Stringデータのタイプ名を指定(コンテンツタイプ)
戻り値 String文字列データが得られる。存在しない場合、空文字列が得られる。
 
■第01引数(データのタイプ名)
 
取得するデータの、コンテンツタイプを指定します。
 
ここで指定できるのは、テキスト関連のみです。
 
サポートしていない場合、ブラウザによってはエラーが発生します。
 
■第01引数(最も互換性のあるタイプ名)
 
InternetExplorer 6 でも動作するタイプ名です。
 
タイプ名説明
"text"プレーンテキスト("text/plain" と同等)
"url"URL 文字列("text/uri-list" と同等)
 
■第01引数(HTML5 世代の一例)
 
タイプ名説明
"text/plain"プレーンテキスト
"text/uri-list"URI 文字列のリスト
"text/html"HTML 文字列
 

■「コンテンツタイプ」をすべて取得する(HTML5 世代)


types プロパティを使用します。
 
DOMStringList オブジェクトが得られます。
 
null 値が得られる事もあります。
 
■ DOMStringList オブジェクトについて
 
配列のように中身を取り出せます。
 
中には、コンテンツタイプ名が格納されています。
 
■得られるコンテンツタイプについて
 
ここで得られるのは、テキスト関連のみです。
 
バイナリ関連が含まれる事はありません。(画像イメージやファイルなど)
 
■ファイルデータが存在する場合
 
"Files" という文字列が、含まれるようになります。
 
ファイルリストを取得するには、files プロパティを使用します。
 
getData("Files"); で取得する事はできません。
 

■ファイルリストを取得する(HTML5 世代)

 
files プロパティを使用します。
 
FileList オブジェクトが得られます。
 
null 値が得られる事もあります。
 
■ FileList オブジェクトについて
 
配列のように中身を取り出せます。
 
中には、File オブジェクトが格納されています。
 
■ File オブジェクトについて
 
ファイルについては、こちらで解説しています。
 
■得られるデータについて
 
ここで得られるのは、ファイル関連のみです。
 
画像イメージなどのバイナリデータが、Blob 型で含まれる事はありません。
 

■データを取得する例(ドロップ発生時)

 
■ドロップが発生したか監視する
 
ondrop イベントを使用します。
 
ドロップ時のイベントについては、こちらで解説しています。
 
■テキストデータを取得する
 
テキストデータを取得する

<html>
  <body>

    <div id="bbb" style="width:400px; height:300px; background:#ccf;" ></div>

    <script type="text/javascript">
    <!--
	// ------------------------------------------------------------
	// "bbb" という ID 属性のエレメントを取得する
	// ------------------------------------------------------------
	var element = document.getElementById("bbb");

	// ------------------------------------------------------------
	// ドラッグ操作中に実行されるイベント(マウスカーソルが要素内に滞在中)
	// ------------------------------------------------------------
	element.ondragover = function (e){
		// ドロップを許可し受け入れを表明(非標準)
		return false;
	};

	// ------------------------------------------------------------
	// ドロップしたときに実行されるイベント
	// ------------------------------------------------------------
	element.ondrop = function (e){
		if(!e) e = window.event; // レガシー

		// ------------------------------------------------------------
		// DataTransfer オブジェクトを取得する
		// ------------------------------------------------------------
		var data_transfer = e.dataTransfer;

		// ------------------------------------------------------------
		// テキストデータを取得する
		// ------------------------------------------------------------
		var str = data_transfer.getData("text");

		// 出力テスト
		console.log(str);

		// ------------------------------------------------------------
		// デフォルトのドロップ機能を無効化(非標準)
		// ------------------------------------------------------------
		return false;
	};

    //-->
    </script>

  </body>
</html>
 
■「コンテンツタイプ」と「データ」を順番に取得する(HTML5 世代)
 
「コンテンツタイプ」と「データ」を順番に取得する(HTML5 世代)

<html>
  <body>

    <div id="bbb" style="width:400px; height:300px; background:#ccf;" ></div>

    <script type="text/javascript">
    <!--
	// ------------------------------------------------------------
	// "bbb" という ID 属性のエレメントを取得する
	// ------------------------------------------------------------
	var element = document.getElementById("bbb");

	// ------------------------------------------------------------
	// ドラッグ操作中に実行されるイベント(マウスカーソルが要素内に滞在中)
	// ------------------------------------------------------------
	element.addEventListener("dragover" , function (e){
		// ドロップを許可し受け入れを表明
		e.preventDefault();
	});

	// ------------------------------------------------------------
	// ドロップ時に実行されるイベント
	// ------------------------------------------------------------
	element.addEventListener("drop" , function (e){

		// ------------------------------------------------------------
		// DataTransfer オブジェクトを取得する
		// ------------------------------------------------------------
		var data_transfer = e.dataTransfer;

		// ------------------------------------------------------------
		// コンテンツタイプのリストを取得する
		// ------------------------------------------------------------
		var type_list = data_transfer.types;
		if(!type_list) return;

		// ------------------------------------------------------------
		// データを順番に取得する
		// ------------------------------------------------------------
		var i;
		var num = type_list.length;
		for(i=0;i < num;i++){

			try{
				// コンテンツタイプを取得する
				var type = type_list[i];

				// データを取得する
				var data = data_transfer.getData(type);

				// 出力テスト
				console.log(type);
				console.log(data);

			}catch(e){
			}

		}

		// ------------------------------------------------------------
		// デフォルトのドロップ機能を無効化
		// ------------------------------------------------------------
		e.preventDefault();
	});

    //-->
    </script>

  </body>
</html>
 
■ファイルを順番に取得する(HTML5 世代)
 
ファイルを順番に取得する(HTML5 世代)

<html>
  <body>

    <div id="bbb" style="width:400px; height:300px; background:#ccf;" ></div>

    <script type="text/javascript">
    <!--
	// ------------------------------------------------------------
	// "bbb" という ID 属性のエレメントを取得する
	// ------------------------------------------------------------
	var element = document.getElementById("bbb");

	// ------------------------------------------------------------
	// ドラッグ操作中に実行されるイベント(マウスカーソルが要素内に滞在中)
	// ------------------------------------------------------------
	element.addEventListener("dragover" , function (e){
		// ドロップを許可し受け入れを表明
		e.preventDefault();
	});

	// ------------------------------------------------------------
	// ドロップ時に実行されるイベント
	// ------------------------------------------------------------
	element.addEventListener("drop" , function (e){

		// ------------------------------------------------------------
		// DataTransfer オブジェクトを取得する
		// ------------------------------------------------------------
		var data_transfer = e.dataTransfer;

		// ------------------------------------------------------------
		// ファイルリストを取得する
		// ------------------------------------------------------------
		var file_list = data_transfer.files;
		if(!file_list) return;

		// ------------------------------------------------------------
		// ファイルを順番に取得する
		// ------------------------------------------------------------
		var i;
		var num = file_list.length;
		for(i=0;i < num;i++){

			// ファイルを取得する
			var file = file_list[i];

			// 出力テスト
			console.log("name:" + file.name);
			console.log("size:" + file.size);
			console.log("type:" + file.type);

		}

		// ------------------------------------------------------------
		// デフォルトのドロップ機能を無効化
		// ------------------------------------------------------------
		e.preventDefault();
	});

    //-->
    </script>

  </body>
</html>
 

■データを取得する例(クリップボード)

 
■ペースト操作が発生したか監視する
 
"paste" イベントを使用します。
 
■テキストデータを取得する(HTML5 世代)
 
テキストデータを取得する(HTML5 世代)

// ------------------------------------------------------------
// ペースト操作が行われると実行されるイベント
// ------------------------------------------------------------
window.addEventListener("paste" , function(e){

	// ------------------------------------------------------------
	// DataTransfer オブジェクトを取得する
	// ------------------------------------------------------------
	var data_transfer = (e.clipboardData) || (window.clipboardData);

	// ------------------------------------------------------------
	// テキストデータを取得する
	// ------------------------------------------------------------
	var str = data_transfer.getData("text");

	// 出力テスト
	console.log(str);

});
 
■「コンテンツタイプ」と「データ」を順番に取得する(HTML5 世代)
 
「コンテンツタイプ」と「データ」を順番に取得する(HTML5 世代)

// ------------------------------------------------------------
// ペースト操作が行われると実行されるイベント
// ------------------------------------------------------------
window.addEventListener("paste" , function(e){

	// ------------------------------------------------------------
	// DataTransfer オブジェクトを取得する
	// ------------------------------------------------------------
	var data_transfer = (e.clipboardData) || (window.clipboardData);

	// ------------------------------------------------------------
	// コンテンツタイプのリストを取得する
	// ------------------------------------------------------------
	var type_list = data_transfer.types;
	if(!type_list) return;

	// ------------------------------------------------------------
	// データを順番に取得する
	// ------------------------------------------------------------
	var i;
	var num = type_list.length;
	for(i=0;i < num;i++){

		try{
			// コンテンツタイプを取得する
			var type = type_list[i];

			// データを取得する
			var data = data_transfer.getData(type);

			// 出力テスト
			console.log(type);
			console.log(data);

		}catch(e){
		}

	}

	// ------------------------------------------------------------
	// デフォルトのペースト操作を無効化
	// ------------------------------------------------------------
	e.preventDefault();
});
 
■ファイルを順番に取得する(HTML5 世代)
 
一部のブラウザのみ対応しています。
 
ファイルを順番に取得する(HTML5 世代)

// ------------------------------------------------------------
// ペースト操作が行われると実行されるイベント
// ------------------------------------------------------------
window.addEventListener("paste" , function(e){

	// ------------------------------------------------------------
	// DataTransfer オブジェクトを取得する
	// ------------------------------------------------------------
	var data_transfer = (e.clipboardData) || (window.clipboardData);

	// ------------------------------------------------------------
	// ファイルリストを取得する
	// ------------------------------------------------------------
	var file_list = data_transfer.files;
	if(!file_list) return;

	// ------------------------------------------------------------
	// ファイルを順番に取得する
	// ------------------------------------------------------------
	var i;
	var num = file_list.length;
	for(i=0;i < num;i++){

		// ファイルを取得する
		var file = file_list[i];

		// 出力テスト
		console.log("name:" + file.name);
		console.log("size:" + file.size);
		console.log("type:" + file.type);

	}

	// ------------------------------------------------------------
	// デフォルトのペースト操作を無効化
	// ------------------------------------------------------------
	e.preventDefault();
});
 
 

 

データを除外する

 
 


■「コンテンツタイプ」を指定して、文字列データを除外する

 
clearData() メソッドを使用します。
 
タイプ名ごとに、1つのデータが格納されています。
 
DataTransfer.clearData( format ) :Void
第01引数(略可)Stringデータのタイプ名(コンテンツタイプ)を指定。省略した場合は全てクリア。
戻り値 Voidなし
 
■第01引数(データのタイプ名)
 
除外するデータの、コンテンツタイプを指定します。
 
ここで指定できるのは、テキスト関連のみです。
 
サポートしていない場合、ブラウザによってはエラーが発生します。
 
引数を省略した場合、すべてのデータを除外します。
 
■第01引数(最も互換性のあるタイプ名)
 
InternetExplorer 6 でも動作するタイプ名です。
 
タイプ名説明
"text"プレーンテキスト("text/plain" と同等)
"url"URL 文字列("text/uri-list" と同等)
 
■第01引数(HTML5 世代の一例)
 
タイプ名説明
"text/plain"プレーンテキスト
"text/uri-list"URI 文字列のリスト
"text/html"HTML 文字列
 

■すべてのデータを除外する

 
clearData() メソッドを使用します。
 
引数を省略します。
 
この場合、バイナリ関連も含めて、すべて除外されます。
 

■データを除外する例(ドラッグ開始時)

 
■ドラッグを開始したか監視する
 
ondragstart イベントを使用します。
 
ドラッグ時のイベントについては、こちらで解説しています。
 
■使用例
 
ドラッグ開始時に、データを除外する(HTML5 世代)

<html>
  <body>

    <div id="aaa" draggable="true" style="width:400px; height:300px; background:#fcc;"></div>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var element = document.getElementById("aaa");

	// ------------------------------------------------------------
	// ドラッグを開始した時に実行されるイベント
	// ------------------------------------------------------------
	element.addEventListener( "dragstart" , function (e){
		if(!e) e = window.event; // レガシー

		// ------------------------------------------------------------
		// DataTransfer オブジェクトを取得する
		// ------------------------------------------------------------
		var data_transfer = e.dataTransfer;

		try{
			// ------------------------------------------------------------
			// 「コンテンツタイプ」を指定して「データ」を格納する
			// ------------------------------------------------------------
			data_transfer.setData( "text/plain" , "テスト文字列です" );
			data_transfer.setData( "text/html"  , "<span>テスト文字列です</span>" );

			// ------------------------------------------------------------
			// 「コンテンツタイプ」を指定して「データ」を除外する
			// ------------------------------------------------------------
			data_transfer.clearData( "text/plain" );
			data_transfer.clearData( "text/html" );

			// ------------------------------------------------------------
			// 「コンテンツタイプ」を指定して「データ」を取得する
			// ------------------------------------------------------------
			console.log( data_transfer.getData( "text/plain") );
			console.log( data_transfer.getData( "text/html")  );

		}catch(e){
		}

	});

    //-->
    </script>

  </body>
</html>
 

■データを除外する例(クリップボード)

 
■カット/コピー操作が発生したか監視する
 
"cut""copy" イベントを使用します。
 
■使用例
 
コピー操作時に、データを除外する(HTML5 世代)

// ------------------------------------------------------------
// コピー操作が行われると実行されるイベント
// ------------------------------------------------------------
window.addEventListener("copy" , function(e){

	// ------------------------------------------------------------
	// DataTransfer オブジェクトを取得する
	// ------------------------------------------------------------
	var data_transfer = (e.clipboardData) || (window.clipboardData);

	try{
		// ------------------------------------------------------------
		// 「コンテンツタイプ」を指定して「データ」を格納する
		// ------------------------------------------------------------
		data_transfer.setData( "text/plain" , "テスト文字列です" );
		data_transfer.setData( "text/html"  , "<span>テスト文字列です</span>" );

		// ------------------------------------------------------------
		// 「コンテンツタイプ」を指定して「データ」を除外する
		// ------------------------------------------------------------
		data_transfer.clearData( "text/plain" );
		data_transfer.clearData( "text/html" );

		// ------------------------------------------------------------
		// 「コンテンツタイプ」を指定して「データ」を取得する
		// ------------------------------------------------------------
		console.log( data_transfer.getData( "text/plain") );
		console.log( data_transfer.getData( "text/html")  );

	}catch(e){
	}

	// ------------------------------------------------------------
	// デフォルトのペースト操作を無効化
	// ------------------------------------------------------------
	e.preventDefault();
});
 
 

 

許可エフェクトを設定する

 
 
 


■ドラッグ側の許可エフェクトを設定する

 
effectAllowed プロパティを使用します。
 
■設定タイミングについて
 
ondragstart イベント内で設定します。
 
■設定値について
 
以下の文字列を設定します。
 
「移動」「複製」「リンク」の3つの概念があります。
 
文字列説明
"copy"「複製」のみ許可します。
"move"「移動」のみ許可します。
"link"「リンク」のみ許可します。
"copyMove"「複製」と「移動」を許可します。
"copyLink"「複製」と「リンク」を許可します。
"linkMove"「リンク」と「移動」を許可します。
"all"すべて許可します。「複製」と「移動」と「リンク」の3つです。
"none"すべて禁止します。
"uninitialized"未設定のデフォルトの値です。("all" と同等)
 
■使用例
 
ドラッグ時に許可エフェクトを設定する

<html>
  <body>

    <div id="aaa" draggable="true" style="width:400px; height:300px; background:#fcc;"></div>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var element = document.getElementById("aaa");

	// ------------------------------------------------------------
	// ドラッグを開始した時に実行されるイベント
	// ------------------------------------------------------------
	element.ondragstart = function (e){
		if(!e) e = window.event; // レガシー

		// ------------------------------------------------------------
		// DataTransfer オブジェクトを取得する
		// ------------------------------------------------------------
		var data_transfer = e.dataTransfer;

		// ------------------------------------------------------------
		// 文字データをセット
		// ------------------------------------------------------------
		data_transfer.setData("text" , "テスト文字列");

		// ------------------------------------------------------------
		// 「複製」のみ許可する
		// ------------------------------------------------------------
		data_transfer.effectAllowed = "copy";
	};

    //-->
    </script>

  </body>
</html>
 

■ドロップ側のエフェクトを設定する

 
dropEffect プロパティを使用します。
 
■設定タイミングについて
 
ondragover イベント内で設定します。
 
■設定値について
 
以下の文字列を設定します。
 
「移動」「複製」「リンク」の3つの概念があります。
 
文字列説明
"copy"ドラッグ側で、「複製」が許可されていれば受け入れます。それ以外は拒否します。
"move"ドラッグ側で、「移動」が許可されていれば受け入れます。それ以外は拒否します。
"link"ドラッグ側で、「リンク」が許可されていれば受け入れます。それ以外は拒否します。
"none"すべての受け入れを拒否します。(明示的に設定した場合)
未設定「移動」「複製」「リンク」の1つでも許可されていれば受け入れます。
 
■未設定時のデフォルトの値に注意
 
未設定のデフォルト値として、"none" 値が格納されている事があります。
 
この場合、「移動」「複製」「リンク」の1つでも許可されていれば受け入れます。
 
明示的に、"none" 値をセットした場合、すべての受け入れを拒否します。
 
■アイコンの変化について
 
effectAlloweddropEffect プロパティの組み合わせで、アイコンが変化します。
 
左側が、effectAllowed(ドラッグ側)の設定です。
 
上側が、dropEffect(ドロップ側)の設定です。
 
未設定"copy""move""link""none"
"copy"
"move"
"link"
"copyMove"
"copyLink"
"linkMove"
"all"
"none"
"uninitialized"
 
■使用例
 
ドロップ側のエフェクトを設定する

<html>
  <body>

    <div id="bbb" style="width:400px; height:300px; background:#ccf;" ></div>

    <script type="text/javascript">
    <!--
	// "bbb" という ID 属性のエレメントを取得する
	var element = document.getElementById("bbb");

	// ------------------------------------------------------------
	// ドラッグ操作中に実行されるイベント(マウスカーソルが要素内に滞在中)
	// ------------------------------------------------------------
	element.ondragover = function (e){
		if(!e) e = window.event; // レガシー

		// ------------------------------------------------------------
		// DataTransfer オブジェクトを取得する
		// ------------------------------------------------------------
		var data_transfer = e.dataTransfer;

		// ------------------------------------------------------------
		// 「複製」が許可されていれば受け入れる
		// ------------------------------------------------------------
		data_transfer.dropEffect = "copy";

		// ------------------------------------------------------------
		// ドロップを許可し受け入れを表明(非標準)
		// ------------------------------------------------------------
		return false;
	};

    //-->
    </script>

  </body>
</html>
 
 

 

ドラッグ時に画像を表示する

 


■ドラッグ時に任意のエレメントを描画する(HTML5 世代)

 
setDragImage() メソッドを使用します。
 
InternetExplorer 11 の時点では、未対応です。
 
Opera(Presto 版) では動作しません。
 
DataTransfer.setDragImage( エレメント , x , y ) :Void
第01引数 HTMLElement描画したい、HTMLElement オブジェクトを指定します。
第02引数 Number水平オフセット位置を指定します。負の値で右、正の値で左に移動します。
第03引数 Number垂直オフセット位置を指定します。負の値で下、正の値で上に移動します。
戻り値 Voidなし
 
■第01引数(エレメント)
 
描画したい、HTMLElement オブジェクトを指定します。
 
画像を表示したい場合は、HTMLImageElement オブジェクトをセットします。
 
画像イメージについては、こちらで解説しています。
 
画像が読み込み途中であった場合、イメージは表示されません。
 
■使用例
 
ドラッグ時に画像を表示する(HTML5 世代)

<html>
  <body>

    <div id="aaa" draggable="true" style="width:400px; height:300px; background:#fcc;" ></div>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var element = document.getElementById("aaa");

	// ------------------------------------------------------------
	// ドラッグ時に描画したい画像イメージ
	// ------------------------------------------------------------
	// HTMLImageElement オブジェクトを作成する
	var image = new Image();

	// URL を指定して、画像の読み込みを開始する
	image.src = "http://example.com/drag.png";

	// ------------------------------------------------------------
	// ドラッグ開始時に実行されるイベント
	// ------------------------------------------------------------
	element.addEventListener( "dragstart" , function (e){

		// DataTransfer オブジェクトを取得する
		var data_transfer = e.dataTransfer;

		// 文字データをセット
		data_transfer.setData("text" , "テスト文字列");

		// ドラッグイメージを設定する
		data_transfer.setDragImage(image , 0 , 0);
	});

    //-->
    </script>

  </body>
</html>