Как различать, если файл или папка перетаскиваются до него отбрасываемый?

Я пытаюсь обнаружить, если папка или файл притянуты dragover или dragenter события.

Например:

В ondrop событие, существует названный аргумент MouseEvent, которому назвали поле dataTransfer, где перечисленные файлы (.files) или объекты (.items), в зависимости от браузера, и я могу считать это и в Chrome и в Firefox. Однако для dragover и dragenter события те поля (.files и .items) пусты. Проблема состоит в том, что мне нужна та информация при перетаскивании, не отбрасывая.

Примечание: И для файлов и для папок event.dataTransfer.types[i] === "Files" true.

Фоновое исследование

Я нашел следующий ответ на частично подходящий для моего вопроса:

WebKit и следовательно Chrome, довольно строги на том, когда можно звонить getData. Нельзя сделать это внутри dragstart или dragover. Я думаю, что это - каноническая ошибка.

Но тот ответ с 2012, и я не могу найти фактическую обновленную информацию о теме, таким образом, я ищу обновленную информацию об этом.

59
задан 23 May 2017 в 15:18

1 ответ

Я смог добраться, весь Mimetype вещи, являющейся , перетащил по моей странице. Mimetype, кажется, пробел для папок, поэтому возможно, можно отличить его тот путь.

Частичный код (извлеченный из Реагируют):

function handleDragOver(ev: DragEvent) {
    ev.preventDefault();
    ev.dataTransfer!.dropEffect = 'copy';
    console.log(Array.from(ev.dataTransfer.items).map(i => [i.kind,i.type].join('|')).join(', '));
}

document.addEventListener('dragover',handleDragOver);

Вывод похож:

file|image/x-icon, file|image/jpeg, file|application/vnd.ms-excel

, Когда я перетаскиваю 3 файла по своей странице.

Не уверенный, если это только работает над localhost, я еще не загрузил это нигде, но это является полностью рабочим.

документы MDN о DataTransferItem

0
ответ дан 1 November 2019 в 12:33

Другие вопросы по тегам:

Похожие вопросы: