如何添加 JS 拖放文件上传而无需任何依赖
问题:
对于你的新 Web 应用程序,你想添加拖放文件上传而不使用任何外部库。
解决方案
你可以使用这组函数,你可以将其适应你的应用程序。
dragdrop_upload.js
/**
* 为 DOM 元素初始化拖放事件处理。
* DOM 元素不必为空才能执行此操作。
* @param elem 可以拖放文件的 DOM 元素
* @param callback callback(files) 函数,当文件被拖放时传递文件列表。
*
* 基本用法示例:
* var elem = document.getElementById('mydiv');
* initializeDragAndDrop(elem, function(files) {
* for (var i = 0; i < files.length; i++) {
* // 对 files[i] 做些处理...
* handleUploadedFile(files[i]); // 替换为你的代码
* }
* });
*/
function initializeDragAndDrop (elem, callback) {
elem.addEventListener('drop', function (event) {
_dragndrop_preventDefault(event);
callback(event.dataTransfer.files);
}, false);
elem.addEventListener('dragover', _dragndrop_preventDefault, false);
elem.addEventListener('dragdrop', _dragndrop_preventDefault, false);
elem.addEventListener('dragenter', _dragndrop_preventDefault, false);
elem.addEventListener('dragleave', _dragndrop_preventDefault, false);
}
/**
* 内部实用函数,阻止给定事件的默认处理。
*/
function _dragndrop_preventDefault (event) {
event.stopPropagation();
event.preventDefault();
}用法示例:
dragdrop_usage.js
var elem = document.getElementById('mydiv');
initializeDragAndDrop(elem, function(files) {
for (var i = 0; i < files.length; i++) {
// 对 files[i] 做些处理...
handleUploadedFile(files[i]); // 替换为你的代码
}
});注意你只需要在相应的 DOM 元素(在此示例中为 mydiv)加载后运行 initializeDragAndDrop。例如,如果你使用 jQuery,你可以这样调用它:
dragdrop_jquery_init.js
$(document).ready(function() {
initializeDragAndDrop(/* ... */);
});纯 Javascript(无 jQuery):
dragdrop_onload_init.js
// 警告:这将替换当前设置的任何 window.onload 函数。
// 此外,这只有在页面上所有内容加载完毕后才会触发,
// 这可能不是期望的行为。
window.onload = function() {
initializeDragAndDrop(/* ... */);
};如果需要,另请参见此之前的 TechOverflow 文章了解如何将上传的文件读入内存。
Check out similar posts by category:
Javascript
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow