Я ищу для этого кросс-браузерное решение. Заранее говорю вам, что я не хочу знать, является ли только файл, потому что я нашел для этого решения. Я хочу знать, является ли файл аудио, изображения или видео в основном. В Chrome, когда вы запускаете событие dragenter, вы можете получить эти данные здесь:
ev.originalEvent.dataTransfer.items[0].type;
Но в Firefox, Safari и IE спецификация "items" еще не была применена: https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items
В этих браузерах вы можете увидеть только атрибут "файлы":
ev.originalEvent.dataTransfer.files[0];
Но на dragenter files[0]
пусто. Как я могу обойти это, чтобы узнать тип файла в этих других браузерах?
Пример (работает только в Chrome):
$(document).on('dragenter', '.drop-zone', function(ev) {
var e = ev.originalEvent;
e.dataTransfer.dropEffect = 'copy';
var file = e.dataTransfer.items[0];
var type = file.type.slice(0, file.type.indexOf('/'));
$(ev.target).html(type);
});
$(document).on('dragleave', '.drop-zone', function(ev) {
$(ev.target).html('Drag your file over here to know the type, no need to drop it');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="drop-zone">Drag your file over here to know the type, no need to drop it</div>