Można zdefiniować strefę drop:
<div id="dropbox">DropZone => you could drop any image from any page here</div>
a następnie obsługiwać dragenter
, dragexit
, dragover
i drop
zdarzenia:
var dropbox = document.getElementById('dropbox');
dropbox.addEventListener('dragenter', noopHandler, false);
dropbox.addEventListener('dragexit', noopHandler, false);
dropbox.addEventListener('dragover', noopHandler, false);
dropbox.addEventListener('drop', drop, false);
function noopHandler(evt) {
evt.stopPropagation();
evt.preventDefault();
}
function drop(evt) {
evt.stopPropagation();
evt.preventDefault();
var imageUrl = evt.dataTransfer.getData('Text');
alert(imageUrl);
}
Jest wewnątrz procedury obsługi zdarzeń drop
że jesteśmy odczytywanie danych obrazu z obiektu dataTransfer
jako tekstu. Jeśli usunęliśmy obraz z innej strony, ten tekst będzie reprezentował adres URL obrazu.
A tutaj jest live demo
.
UPDATE:
Wygląda istnieją różnice między Chrome na Windows i MacOS. Na Windows dataTransfer.getData('Text');
działa, ale nie na MacOS. dataTransfer.getData('URL');
powinien działać na obu.
To jest ostrzeżenie o pustym ciągu w Chrome – Duopixel
@Duopixel, to bardzo dziwne. Działa to dla mnie: Chrome 21.0, Windows 7 64 bit. Z jakiego systemu operacyjnego korzystasz? Czy to działa z FF? –
Chrome 21 MacOS 10.7.4. Być może inny użytkownik MacOS może potwierdzić, ktoś? Działa w Firefoksie. – Duopixel