2013-03-27 19 views
14

タイトルとして、JavaScriptのドラッグ&ドロップイベントをシミュレートしようとしています。javascriptでHTML5のドラッグアンドドロップイベントをシミュレートする方法はありますか?

jquery.ui.simulateとシミュレート関数hereを調べました。どちらもjQuery UIオブジェクトで動作するmousedown、mousemove、およびmouseupをシミュレートすることによって、ドラッグアンドドロップをシミュレートするために使用できるようです。

しかし、drag and drop demo siteのようなページのドラッグ/ドロップイベントは、同じメソッドを使用してシミュレート可能ではないようです。 mousedownをトリガーしても、dragstart HTML5イベントは発生しません。

シミュレートするmousedown/mousemove/etcに基づいて、dragstartイベントを発生させる方法がありますか、またはdragstart(およびドロップ)イベントを直接シミュレートする方法はありますか?

私はデモページ

simulate(document.querySelector('#three'), 'dragstart') 

に、次のような何かを試みることができるように、HTML5のdragstartイベントを追加するsimulation function found on SOを修正しようとしましたが、私が作成するかどうかはわかりませんので、私はエラーを取得しますシミュレートされたdragstartイベントのdataTransferオブジェクト

基本的には、demo drag and drop pageの要素 '3'を 'bin'要素にドラッグできる答えは、jquery.ui.simluate(または別のライブラリ)を使用するか、 simulate function私はSOで見つけました。

+0

あなたはそれを行う方法を理解しましたか? – lft93ryt

答えて

8

偽のイベントオブジェクトを再作成することをお勧めします。

ドラッグアンドドロップファイルアップロードライブラリ(Droplit、恥知らずなプラグイン)のユニットテストでは、jQueryのEventメソッドでこれを行っています。私のソースコードでは、私はそうのようなelement.ondrop()と私のドロップイベントリスナーを設定します。

element.ondrop = function(e) { 
    e.preventDefault(); 
    readFiles(e.dataTransfer.files); 
}; 

をそして私は、偽のイベントオブジェクトを構築し、ondropメソッドに渡すことで、これを試すことができます。

element.ondrop($.Event('drop', {dataTransfer: { files: [] }})); 
関連する問題