Gestione degli eventi: similitudini tra Flash e Javascript

Mercoledì 25 Luglio, 2007

Uno dei punti di forza di Adobe Flash risiede nella scelta di ECMAScript (sottoprodotti di ECMA - European Computer Manufacturers Association) come standard di scripting. ActionScript e Javascript, infatti, derivano entrambi da uno standard superiore che li rende estremamente simili. Questo è uno dei motivi per il quale molti programmatori ActionScript sviluppano con estrema semplicità anche in Javascript e viceversa.

ActionScript ha da sempre avuto una gestione "doppia" degli eventi che spesso ha confuso alcuni sviluppatori. Nei MovieClip, ad esempio, è possibile impostare un evento semplicemente dichiarando una funzione alla proprietà dell'evento stesso, ad esempio:

Metodo 1

Actionscript:
  1. mio_mc.onRelease = function() {
  2.     trace("Click sul MovieClip");
  3. }

Altri oggetti, diversamente, richiedono una gestione diversa dell'evento che si vuole monitorare, richiedendo il classico listener, un oggetto predisposto a tale compito. Ad esempio l'oggetto Mouse può essere controllato in questo modo:

Metodo 2

Actionscript:
  1. var mouseListener:Object = new Obejct();
  2. mouseListener.onMouseMove = function() {
  3.     trace("Mouse in moto");
  4. }
  5. Mouse.addListener(mouseListener);

I componenti possiedono un'ulteriore variante, come il componente Loader:

Metodo 3

Actionscript:
  1. var loaderListener:Object = new Object();
  2. loaderListener.complete = function(evt:Object) {
  3.     trace("Caricamento completato");
  4. };
  5. myLoader_ldr.addEventListener("complete", loaderListener);

Perchè queste differenze? La ragione, in verità, è molto semplice. Il metodo 1, quello più immediato, viene utilizzato quando l'evento da "intercettare" è unico nel suo genere, cioè quando non ha senso far "scattare" più funzioni una di seguito all'altra. I metodi 2 e 3, invece, creano delle "liste" di "ascoltatori" e sono estremamente utili e potenti in quanto consentono di agganciare virtualmente infinite funzioni ad un determinato evento.

La stessa identica cosa accade in Javascript e la si può ammirare in librerie come prototype. Il comodissimo metodo observe(), messo a disposizione dall'oggetto Event, permette di agganciare funzioni ad un evento di un oggetto. Ad esempio:

JavaScript:
  1. Event.observe(window, 'load', function() { alert("Finestra caricata"); } );

In questo caso abbiamo agganciato la nostra funzione che mostra un alert all'evento load dell'oggetto window. Potremmo tuttavia ripetere l'istruzione e agganciare un'ulteriore evento:

JavaScript:
  1. Event.observe(window, 'load', function() { alert("Finestra caricata - 1"); } );
  2. Event.observe(window, 'load', function() { alert("Finestra caricata - 2"); } );

Questa caratteristica, comune anche in ActionScript, è estremamente versatile è, in particolare in Javascript, è stata la chiave per la realizzazione di moltissimi "Widgets" ed estensioni (vedi il classico Snap) che oggi proliferano nel Web. La possibilità di accodarsi, infatti, ad eventi già controllati da altre funzioni, permette di essere non intrusivi (Unobtrusive) e quindi, in pratica, di aggiungere funzioni a quelle già presenti.

Post correlati

BlogBabel API: finalmente la beta

Martedì 24 Luglio, 2007
Aggiornamento: Blogbabel ha chiuso - tutti i servizi, widget e plugin non sono più attivi

Grazie alle segnalazioni di P|xel e Dat sono venuto a conoscenza delle nuove API messe a disposizione dal sito BlogBabel. Così ho rilasciato una nuova versione dell'antipixel di BlogBabel in Flash.

image

In questa nuova versione (chi ha installato la precedente versione in Flash non deve fare nulla, l'aggiornamento è automatico) sono sfruttate le nuove API messe a disposizione da BlogBabel. Il codice è meno invasivo e più veloce rispetto al precedente. Dal menu contestuale, inoltre, è possibile accedere a maggiori informazioni e il calcolo sulla "salita" o "discesa" (sfondo verde o rosso) è ora corretto essendo fornito dallo stesso sistema API di BlogBabel.

Ricordo che per usare l'antipixel basta essere registrati su BlogBabel e inserire le seguenti linee di codice nel vostro sito:

[html

[/html]

Sostituite [blog] con il codice fornito nelle metriche di BlogBabel.

Post correlati

Flash: LoadVars e XML per inviare dati in POST

Venerdì 20 Luglio, 2007

Ecco un ottimo modo per inviare dati in POST ad un Web Server. Useremo due oggetti: un oggetto LoadVars per spedire e un oggetto XML per ricevere (nel caso ci aspettiamo un documento di ritorno formattato in XML). Utilizzare l'oggetto LoadVars di Flash è utile sia per la creazione runtime di proprietà che saranno viste come variabili POST sia per la possibilità di specificare il metodo si spedizione: POST o GET.

Prima di tutto creiamo l'oggetto LoadVars che sarà usato per spedire:

Actionscript:
  1. var s_lv:LoadVars = new LoadVars();

A questo possiamo aggiungere le variabili in POST in modo assai semplice:

Actionscript:
  1. s_lv.title = "Hello";
  2. s_lv.subtitle = "Hello World";

Prepariamo l'oggetto che riceverà la risposta dal Web Server (nella stdout) - se PHP basta fare un echo:

Actionscript:
  1. var r_xml:XML = new XML();
  2. r_xml.ignoreWhite = true;

A questo punto non ci rimane che inviare:

Actionscript:
  1. s_lv.sendAndLoad("http://miodominio.com/miapagina.php", r_xml, "POST");

Il metodo sendAndLoad() dell'oggetto LoadVars è molto ultile in quanto permette di specificare l'oggetto di ritorno (in questo caso il nostro oggetto XML r_xml) e il metodo di spedizione (nel nostro caso POST).
Per finire basta metterci in attesa:

Actionscript:
  1. r_xml.onLoad = function(success:Boolean) {
  2.     if(success) {
  3.         // elaborazione risultato
  4.     }
  5. };

Post correlati

JingProject, lo Screencast-o-matic online di immagini e Video

Giovedì 19 Luglio, 2007

jing JingProject è un servizio online corredato da un software (da scaricare) che permette di "catturare" immagini e video dal nostro Desktop.
L'applicazione è disponibile sia per Windows che per Mac ed è realizzata davvero bene. Si possono catturare finestre o porzioni di schermo, sia come immagine (modificabile tramite un minimal editor incorporato) che come Video. Immagini e Video possono essere salvati sul proprio HardDisk o, alternativamente, è possibile condividerle in rete creando rapidamente un account su JingProject. Le immagini o i video saranno così disponibili per la condivisione tramite email, IM o il Blog!

Vedi video introduttivo!

Il progetto è davvero interessante e realizzato bene, anche se non è l'unico disponibile online. Ecco uno schema del suo funzionamento.

Post correlati

Flash 8: PopUpManager tipo non corrispondente

Mercoledì 18 Luglio, 2007

image Un baco di Macromedia Flash 8, che può portare alla disperazione uno sviluppatore, risiede nella gestione del componente Window, quando viene utilizzato tramite la classe mx.managers.PopUpManager! Inoltre gli esempi forniti all'epoca da Macromedia su questo argomento, e tutt'ora online, non sono chiari, spesso addirittura palesemente sbagliati. Quello che accade, in sostanza, è un malfunzionamento che si produce all'improvviso nonostante il nostro codice funzionanva fino a cinque secondi prima. Un componente di tipo Window può essere utilizzato sia tramite il componente visuale sia tramite ActionScript, utilizzando la "comoda" libreria PopUpManager (che permette anche funzioni di modal Window - Finistre modali in topmost). Partendo da codice seguente...

Actionscript:
  1. /*
  2. ** Ricordarsi di mettere in libreria il componente Window
  3. */
  4. import mx.managers.PopUpManager;
  5. import mx.containers.Window;
  6.  
  7. my_win = PopUpManager.createPopUp(_root, mx.containers.Window, true, {title:"Mia Window", closeButton:true});

... quello che accade è che ad un certo punto Flash potrebbe impazzire e segnalare un errore di "tipo non corrispondente" in queste linee di codice! Lasciate stare! Non potete fare nulla per fargli cambiare idea! Tuttavia una soluzione c'è! Basta chiudere Flash e andare (su Windows) nelle impostazioni di sistema ed eliminare la "copia" che Flash crea delle sue impostazioni (del cavolo - visto che vengono corrotte!!):

C:\Documents and Settings\{utente}\Impostazioni locali\Dati applicazioni\Macromedia\Flash 8

Dove è {utente} è il vostro utente di Windows. Qui sotto troverete una cartella "it" (o "eng" o altro, a seconda delle impostazioni di sistema e della versione di Flash), eliminatela senza pensarci due volte. Lanciate nuovamente Flash e tutto funzionerà!

Post correlati

Accordion per Scriptaculous

Lunedì 16 Luglio, 2007

Finalmente un bello script in Javascript (scarica Accordion 1.0), semplice e leggero, che permette di aggiungere il componente Accordion usato in Flash e in mootools sfruttando la libreria scriptaculous. Effettivamente mancava questo oggetto, utile in tante occasioni. Questa versione è estremamente semplice e permette di creare Accordion sia orizzonali che verticali. Lo script è gratuito, tuttavia potete fare una piccola donazione all'autore per aiutarlo ad acquistare un bel MacPro ;)

Per utilizzarlo basta inserire queste semplici righe di codice:

HTML:
  1. <script type="text/javascript" src="javascript/prototype.js"></script>
  2. <script type="text/javascript" src="javascript/effects.js"></script>
  3. <script type="text/javascript" src="javascript/accordion.js"></script>

Il markup HTML è immediato:

HTML:
  1. <h3 class="accordion_toggle">Title Bar</h3>
  2. <div class="accordion_content">
  3. ...
  4. </div>
  5. ...
  6. ...
  7. ...
  8. <h3 class="accordion_toggle">Title Bar</h3>
  9. <div class="accordion_content">
  10. ...
  11. </div>

Un'esempio pratico:

JavaScript:
  1. // General Syntax
  2. new accordion('container-selector', options);
  3.  
  4.  
  5. // Horizontal example
  6. var horizontalAccordion = new accordion('#top_container', {     
  7.     classNames : {
  8.           toggle : 'horizontal_accordion_toggle',
  9.           toggleActive : 'horizontal_accordion_toggle_active',
  10.           content : 'horizontal_accordion_content'
  11.      },     
  12.      defaultSize : {
  13.          width : 525
  14.      },
  15.      direction : 'horizontal'
  16. });
  17.  
  18. // Vertical Accordion
  19. var verticalAccordion = new accordion('#bottom_container');

Post correlati

Suggerimenti per Mogulus

Sabato 14 Luglio, 2007

Alcuni suggerimenti al team di sviluppo di Mogulus per migliorare la gestione dell'interfaccia dedicata alla gestione e diretta televisiva.

  • Login
    non viene ricordato l'ultimo accesso; ogni volta bisogna rieseguire senza possibilità di segnalare al sito di ricordarselo. Funzione utile per chi accede spesso!
  • Produzione
    imageil modulo di accesso ad una presistente produzione non permette di elencare i propri canali. Bisogna ricordarsi ogni volta il nome del canale insieme alla username e password. Motivo di questa scelta, probabilmente, è la possibilità di far partecipare più utenti alla stessa sessione, ma il tutto è gestito deciamente male! Inoltre avendo scelto Flash come interfaccia non è possibile sfruttare le funzionalità di autocompletamento classiche dei browser/HTML. Tuttavia anche Flash ha tali funzioni se correttamente gestito.
  • Get Videos
    image questa sezione soffre spesso di malfunzionamenti: i thumbnail dei video caricati a volte si scambiano e il drag & drop risente di rallentamenti frequenti. Mi è capitato di eliminare per sbaglio un video scambiandolo per un'altro. La simpatica funzione di ricerca, che permette di rintracciare Video sulla rete, è estremamente limitata. La ricerca è solo per testo e la fonte dei risultati non è mostrata. Non è possibile eseguire ricerche particolari e i risultati sono limitati a 50! Un vero peccato, in quanto costringe - alla fine - a scaricarsi i video localmente in altri modi ed eseguire un lungo upload! Il tutto con una evidente ridondanza di informazione: molti video sono già nei "calderoni" online come Google Vide, YouTube, ecc... Inoltre non è possibile inserire un link ad un video presente in rete, come un'indirizzo ad un file FLV su Blip.tv ad esempio.
  • Broadcast Live
    image anche questa sezione non mantiene i dati della sessione precedente! Forse questo è il peggiore dei comportamenti. Bisogna reimpostare tutto da capo ogni volta, come il Ticker, il Branding, etc... Inoltre non è stata pensata una vera e propria scaletta per eseguire una serie di video con relative scritte senza stare per forza davanti al PC. Diciamo che Mogulus è pensato davvero come postazione di regia in diretta e obbliga quindi la presenza di un "regista", nonostante la funzionalità di Auto-Pilot che svolge una "minimal" funzione al posto nostro! Cosa utile sarebbe stato associare Ticker, Branding, scritte Fullscreen e Partial/Strap alla messa in onda di un video, soprattutto per le situazioni ripetitive. In questo modo l'Auto-Pilot avrebbe maggiore utilità.
  • Control Auto-Pilot
    image a parte la sequenza degli stotyboard mostrata nel pannello centrale, questa sezione è poco chiara e sostanzialmente inutile, soprattutto la terza colonna - What's playing now - sempre vuota! Qui andrebbero aggiunte le funzioni più importanti. Inoltre i bottoni Restart Auto-Pilot e Resume Auto-Pilot non sono particolarmente utili e chiari, costringendo, a fronte di un intervento in diretta, a re-inizializzare la sequenza ricominciando lo slidshow da capo!

Post correlati

E=mc^2 TV: prove tecniche di trasmissione

Venerdì 13 Luglio, 2007

image Aperto un nuovo canale NetTV su Pensieri Sottili, dedicato alla Scienza e in particolare alla Fisica, basato sulla tecnologia Mogulus. Per ora è possibile vedere una serie di documentari in varie lingue (tra cui un divertente cartone animato in italiano sulla Relatività) e varie prove tecniche di trasmissione!
Con l'occasione ho avuto modo di provare il sistema offerto da Mogulus, estremamente versatile nelle sue funzioni di "diretta televisva" anche se alcune cose davvero non vanno.
Scriverò a breve un Post con i miei commenti e suggerimenti al team di sviluppo di Mogulus! Ultima nota: oggi era impossibile accedere alla sezione Produce di Mogulus (Connection problem), pecca non molto sostenibile per chi fa TV in diretta... è vero che il sistema è in beta, comunque sia un'immediata risposta sarebbe gradita.

mogulus1

Post correlati

Unobtrusive LightWindow 2.0

Giovedì 12 Luglio, 2007

QuickTime

Nuova versione della libreria "unobtrusive" LightWindow in  Javascript specializzata nella visualizzazione di gallerie immagini ed ora non solo. Con questa versione è possibile visualizzare molti link: immagini, filmati Flash, filmati QuickTime, documenti PDF via FlashPaper, siti Web e "finestre" personalizzate. Inoltre tra le nuove caratteristiche troviamo:

  • Personalizzazione della "caption" della Window
  • Possibilità di creare finestre in sovrainpressione direttamente da codice Javascript
  • Supporto dell'iframe
  • Maggiori parametri per la personalizzazione della presentazione
  • Migliorata la gestione delle transizioni animate
  • Possibilità di miscelare immagini con animazioni Flash o filmati QuickTime

Post correlati