Programmazione.it v6.2
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Chat Forum
Drag and drop di immagini con JavaScript, Firefox e Google Gear (2/2)
Scritto da Francesco Carotenuto il 25-11-2009 ore 10:11
Nel precedente articolo avevamo definito le funzioni handleDragEnter, handleDragOver e HandleLeave, che andranno a richiamare tutti i finishDrag e che gestiranno i vari eventi relativi al drag. Di seguito riportiamo il codice sia di finishDrag che degli handler descritti sopra.
  1. function finishDrag(event, isDrop) {
  2.   var dropZone = document.getElementById('dropZone');
  3.   var rect = dropZone.getBoundingClientRect();
  4.   hLeft = dropZone.getBoundingClientRect().left;
  5.   var reject = event.clientX >= rect.right;
  6.   desktop.setDragCursor(event, reject ? 'none': 'copy');
  7.   if (!isDrop) {
  8.     ;
  9.   }
  10.   if (isFirefox) {
  11.     if (reject || isDrop) {
  12.       event.stopPropagation();
  13.     }
  14.   } else if (isIE || isSafari || isNpapi) {
  15.     if (!reject && !isDrop) {
  16.       event.returnValue = false;
  17.     }
  18.   }
  19. }
  20.  
  21. function handleDragEnter(event) {
  22.   updateEventOutput(event);
  23.   finishDrag(event, false);
  24. }
  25.  
  26. function handleDragOver(event) {
  27.   updateEventOutput(event);
  28.   finishDrag(event, false);
  29. }
  30.  
  31. function handleDragLeave(event) {
  32.   updateEventOutput(event);
  33. }
La funzione handleDrop è utilizzata per gestire l'operazione di drop: in particolare, utilizzando le funzionalità di Gears, essa analizza il file ricevuto dal desktop (linea 10 del listato riportato sotto) e infine costruisce una miniatura dell'immagine caricata e una sua versione ridimensionata da memorizzare. Le funzioni che si occupano di questi ultimi due passaggi sono facilmente riconoscibili nella lettura del codice che segue:
  1. function handleDrop(event) {
  2.   updateEventOutput(event);
  3.  
  4.   var data = desktop.getDragData(event, 'application/x-gears-files');
  5.   var files = data && data.files;
  6.   if (files) {
  7.     var nbFiles = files.length;
  8.     for (i = 0; i < nbFiles; i++) {
  9.         var file = files[ i ];
  10.         var md = desktop.extractMetaData(file.blob);
  11.         var gearsCanvas = google.gears.factory.create('beta.canvas');
  12.         gearsCanvas.decode(file.blob);
  13.         gearsCanvas.resize(640, 480, 'bilinear');
  14.         var resizedBlob = gearsCanvas.encode();
  15.         if (nbFiles == 1) {
  16.             gearsCanvas.decode(resizedBlob);
  17.             gearsCanvas.resize(320, 240, 'bilinear');
  18.             var dropPictureBlob = gearsCanvas.encode();
  19.             if (dropPictureName != null)
  20.                 picturesStore.remove(dropPictureName);
  21.             dropPictureName = 'temp_'+file.name;
  22.             picturesStore.captureBlob(dropPictureBlob, dropPictureName);
  23.             document.getElementById('dropZonePicture').src=dropPictureName;
  24.         }
  25.  
  26.         gearsCanvas.decode(resizedBlob);
  27.         gearsCanvas.resize(100, 75, 'nearest');
  28.         var thumbnailBlob = gearsCanvas.encode();
  29.         picturesStore.captureBlob(resizedBlob, file.name);
  30.         picturesStore.captureBlob(thumbnailBlob, 'thumbnail_' + file.name);
  31.         addImage('gallery', file.name, file.name);
  32.         addImageRefInDb(file.name); 
  33.     }
  34.   }
  35.   finishDrag(event, true);
  36. }
E' possibile scaricare il codice completo, tra cui quello qui descritto, e utilizzare una demo, che implementa una rudimentale galleria di immagini. Quest'ultima, per funzionare, ha necessariamente bisogno di Firefox 3.0 — al momento della stesura dell'articolo la demo non funziona correttamente con la versione 3.5 — su cui è installata l'ultima versione di Google Gears.
Precedente: Opera 10.10 lancia United, un po' browser e un po' server (1/2)
Successiva: CppUnit, un framework per lo unit test su codice C++: introduzione
Copyright Programmazione.it™ 1999-2009. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.779 secondi. Sito ottimizzato per Mozilla Firefox. Powered by Kyron.