2012-01-30 11 views
6

Gmailのようなファイルアップロードシステムを実装しようとしています。私はすでにすべてのFileupload/AJAXの問題を完了しており、完璧に動作します。私が持っている唯一の問題はユーザーフィードバックです。デスクトップからブラウザにファイルをドラッグしたときにトリガされるJavascriptイベントとは何ですか?

例えば、Gmailで、ファイルをブラウザにドラッグすると(IE9 +ユーザと仮定して)、ファイルがドロップされるようにポップアップする領域があります。これはJavaScriptイベントですフレームワーク(Jqueryと言う)でキャプチャされているので、ドロップ領域でクールなアニメーションを作成できます。

私の質問は簡単です。これを行うにはどのようなイベントをキャプチャする必要がありますか?何か案は?私はそれを間違っているのですか?

答えて

8

メインイベントはちょうどdropです。

また、dragenterdragleaveを処理する必要があります。そうしないと、ドロップ操作によってドロップされたファイルが読み込まれます。場合によってはdragoverもご覧ください。

私はそうのように、これらのハンドラを登録するいくつかのコードを持っている:

var $dz = $('#dropzone'); 
$dz.on({ 
    dragenter: dragenter, 
    dragleave: dragleave, 
    dragover: false, 
    drop: drop 
}); 

function dragenter() { 
    $dz.addClass('active'); 
}; 

function dragleave() { 
    $dz.removeClass('active'); 
}; 

function drop(e) { 
    var dt = e.originalEvent.dataTransfer; 
    if (dt) { 
     var files = dt.files; 
     ... 
    } 
    $dz.removeClass('active'); 
}; 

この場合dragenterdragleaveハンドラはものがそれにドラッグされているときだけでドロップゾーンの外観を変更することがあります。

+0

クール!私の上司はこの機能がほしいと思う。 – gdoron

+0

これは実際にはちょっとした作業ですが、ドラッグしたアイテムをドロップゾーンに渡すときだけです。ドロップゾーンがどこにあるのかまだ分かりません。 $( "body")。on ...それはうまくいきますが、私が他のdivに入ると(私のページは固定幅で中央に置かれていますが、私たちは "純粋なボディタグです"と言うかもしれない両側にいくつかの空きスペースがあります)、それは休暇ハンドラをトリガします...病気はページ全体に "enter"を維持する方法を理解し、実際にブラウザゾーンから完全に離れるときは「leave」となります。助けてくれてありがとう –

+0

それ以外にもsuxのようなものです。マウスの動きに応じて、あらゆるピクセルにイベント "dragenter"が誘発されるようです。だから私は2秒間dropzoneに素晴らしい "揺れ"の効果を演奏すると言うことができます..まあ..それは実際には凍った、私はマウスを動かし続ける限り、シェイクを止めていないcuzのように感じる! –

3

これはdropと呼ばれ、イベントオブジェクトから必要なプロパティはoriginalEventプロパティになります。

$(element).on("drop",function(e){ 
    console.log(e.originalEvent) 
}); 

私の記憶が正しければ、あなたも、それがドロップイベントを発射するために、同じ要素上のdragEnterとdragleaveのバインドを解除する必要があります。

$(element).on("dragenter dragleave", false); 
+0

dragenterとdragleaveについての良いメモ - 私はそれらを自分のコードに入れましたが、実際には必要であることを忘れていました。 – Alnitak

+0

@Alnitak - ええと、この機能を最初に実装しようとしたときにループを起こしました。私はテキストエリアを使用しているため、jQueryのドラッグアンドドロップを使用して、全体のアイデアを破棄してしまいました。これらのイベントをテキストエリアの通常の使い方でバインドしています。 –

関連する問題