您还需要监听dragenter
和dragover
事件并防止它们的默认行为。您还需要防止drop
事件处理程序中的默认行为。
例如,您可能想做这样的事情......
var $dropArea = $( "#drop-area" );
$dropArea.on({
"drop" : makeDrop,
"dragenter": ignoreDrag,
"dragover": ignoreDrag
});
function ignoreDrag( e ) {
e.preventDefault();
}
function makeDrop( e ) {
var fileList = e.originalEvent.dataTransfer.files,
fileReader;
e.preventDefault();
if ( fileList && fileList.length > 0 ) {
fileReader = new FileReader();
fileReader.onloadend = handleReaderOnLoadEnd( $( "<img />" ) );
fileReader.readAsDataURL( fileList[ 0 ] );
}
}
function handleReaderOnLoadEnd( $image ) {
return function( event ) {
$image.attr( "src", this.result )
.addClass( "small" )
.appendTo( "#drop-area" );
};
}
您可以在此 JSFiddle http://jsfiddle.net/qsyNW/找到一个工作示例
注意:你不必像我一样使用 jQuery。但是,如果您确实使用 jQuery,那么您需要e.originalEvent
在事件处理程序内部进行引用drop
才能访问dataTransfer.files
.