Archive for the 'jQuery' Category

na3.it

Monday, March 31st, 2008
na3 Studio di Architettura

E’ stata lunga ma dopo qualche mese di lavoro (freelance, a partire dalle ore 20 p.m, quindi se fossero continuativi sarebbero una quindicina di giorni) sono felice di postare il link al nuovo sito na3 Studio di Architettura.

Come già accennato in qualche post precedente, per l’interaction design ho utilizzato jQuery; in particolare, per questo progetto ho usato i plugins Cycle, SafeMail, Reflect, e ho scritto neanche duecento righe di codice.
Il sito si presenta estremamente semplice nel design, chiaro, pulito, leggero e snello nel markup, potente e conciso nel codice JS.

Da segnalare la homepage, la pagina studio e la pagina indice dei progetti; quest’ultima in particolare si basa sul menu accordion già visto su questo mio sito, ma in più può far scrollare - con effetto easing - gli elementi figli di una categoria (projects>design), se questi sono più di cinque. Abbiamo realizzato (customizzandolo nello style e in qualche elemento di markup) anche un corporate blog per na3, powered WP 2.5.

Very clean and concise markup, degrades wonderfully. Truly the type of work one would look for and appreciate.
— Kris, from the jQuery discussion group

Il lato backend è stato curato dal mio esimio collega freak Heracleum (di cui non abbiamo una foto), in PHP.
Enjoy the new na3 website!

new Year brings new things

Thursday, January 10th, 2008

Let me send out best wishes to all for you and your families in the following year! No matter how good or bad past year was for you, I hope this brand new year will bring you more success and happiness in business and personal life.

A proposito di success e satisfaction voglio annotare in questo breve post di auguri per il nuovo anno, anche un paio di piccole soddisfazioni personali, relative ai miei (unici) due plugin jQuery finora realizzati: liScroll e slideViewer.

Già da tempo avevo visto che sia l’uno, sia l’altro avevano un buon ranking tra i “Most Popular” plugin di jQuery e, poichè nelle pagine-tutorial di questi miei plugins ho installato Google Analytics ho potuto apprezzare il traffico generato da queste pagine (il referral è la pagina plugin di jQuery): picchi di 500 visite al giorno per slideViewer (il mio generatore di image-galleries) e 600 per liScroll (il mio news ticker).

Addirittura c’è chi si è preso la briga di paragonare 5 gallerie fatte con jQuery e di decretare come la migliore proprio slideViewer, o chi la ha inserita tra le “12 better Javascript and Ajax based solutions for gallery needs”; e poi c’è chi ha scritto tutorial del tutorial per il mio news ticker plugin (e da qui il numero di visite) … insomma l’anno è finito bene e comincia bene (ma si dai siamo ottimisti, stò governo cadrà, la monnezza a Napoli brucerà e Carla Bruni si sposerà… e andiamo), ho avuto un buon feedback per queste due semplici idee e penso che il mio impegno non potrà che aumentare su questo fronte infatti sto lavorando alla versione 2.0 di slideViewer, ho pubblicato un brand new “sliding” portfolio … e mi sono comprato un Logo 500DX al posto del pesante Quick EP10.

Happy new Year!

accordion menu con jQuery

Wednesday, December 5th, 2007

Con estrema lentezza visti i vari impegni - scusa Nicola - sto lavorando ad un progetto freelance; per le tematiche relative all’interaction design ho pensato di usare jQuery mentre il markup è rigorosamente sviluppato in xHTML strict; il tempo non è molto e mi son detto: voglio usare quanti più plugin riesco, voglio vedere quanto è vero stò motto “write less, do more”, e quanto riesco a customizzarli in base alle mie esigenze.

Ma veniamo al perchè di questo post: nel mentre sviluppavo il mio design già pensavo ad un simpatico menu di tipo “a soffietto” o accordion, per dirla in inglese, che suona meglio.
Ed ho deciso di condividere con voi tale idea anticipandovi che comunque ci sono già buoni tutorial e plugin sull’argomento ma nessuno, non capisco perchè, parte da un set di liste non-ordinate annidate.
Questo è il nostro markup: molto semplice. Ricordiamoci di dare un ID alla lista.


<ul id="prjcats">
<li><a href="#">Henseleit Helicopters</a>
<ul>
<li><a href="#">MP V91 XL</a></li>
<li><a href="#">MP XLE</a></li>
</ul>
</li>
<li><a href="#">Mikado Model Helicopters</a>
<ul>
<li><a href="#">V Stabi 3 Axis</a></li>
<li><a href="#">Logo 500DX</a></li>
<li><a href="#">Logo 500 3D</a></li>
</ul>
</li>
<li><a href="#">Thunder Tiger</a>
<ul>
<li><a href="#">A109 Scale Fuselage Kit</a></li>
<!-- eccetera -->
</ul>
</li>
</ul>

Ora passiamo allo script che ce la trasforma in un accordion menu con effetto easing.


<script type="text/javascript">
$(function(){
$("ul#prjcats li ul").hide();
$("ul#prjcats>li>a").click(function() {
$(this).addClass("current");
var $subnav = $(this).next();
if($subnav.is(":visible")) {
$subnav.animate({height: "toggle"}, 750, "easeInOutExpo").prev().removeClass("current");
}
if(!$subnav.is(":visible")) {
$("ul#prjcats li ul:visible").animate({height: "toggle"}, 750, "easeInOutExpo").prev().removeClass("current");
$subnav.animate({height: "toggle"}, 750, "easeInOutExpo");
}
return false;
});
});
</script>

E questo è il nostro script jQuery. Ricordiamoci di includere il framework stesso e il plugin jquery.easing


<script type="text/javascript" src="http://www.gcmingati.net/wordpress/wp-content/themes/giancarlo-mingati/js/jquery-1.2.1.min.js"></script>
<script type="text/javascript" src="http://www.gcmingati.net/wordpress/wp-content/themes/giancarlo-mingati/js/jquery.easing.1.2.js"></script>

Ora vediamo nello specifico cosa fà questo script:
Per prima cosa nascondiamo tutte le liste annidate.


$("ul#prjcats li ul").hide();

Al click dei link di primo livello - notare la sintassi “>”


$("ul#prjcats>li>a").click(function()

aggiungiamo una classe .current (il colore rosso di selezione) e assegnamo alla variabile $subnav le liste di secondo livello.
.next() trova il primo elemento “discendente” di A: appunto una lista UL


$(this).addClass("current");
var $subnav = $(this).next();

Qui controlliamo se $subnav è visibile - cioè aperto; se lo è usiamo toggle per switchare tra lo stato di visibile o invisibile. Se é “.is” visibile, chiudi la sub-lista.
Per l’animazione usiamo un tempo “750″- millesimi - ed un metodo easing “easeInOutExpo”. Risaliamo con .prev() ad A e gli togliamo la classe di selezione.
Nota sugli effetti easing: sono 30 e potete giocherellare con i vari metodi di cui trovate un elenco qui. Provate l’effetto che più vi piace. E un’ulteriore nota: gli effetti si fanno apprezzare su liste con molti elementi; se le vostre liste sono corte, evitate effetti di accelerazione/rimbalzo.


if($subnav.is(":visible")) {
$subnav.animate({height: "toggle"}, 750, "easeInOutExpo").prev().removeClass("current");
}

Qui invece controlliamo se $subnav selezionato non è visibile - è chiuso - e se lo è, prima controlliamo se qualcun altro è aperto “"ul#prjcats li ul:visible"” e lo chiudiamo, e poi apriamo il $subnav selezionato.


if(!$subnav.is(":visible")) {
$("ul#prjcats li ul:visible").animate({height: "toggle"}, 750, "easeInOutExpo").prev().removeClass("current");
$subnav.animate({height: "toggle"}, 750, "easeInOutExpo");
}

Dopo gli if, usiamo “return false;” per evitare che al click dei link di primo livello, che sono vuoti “#”, si verifichi il balzo verso l’alto della pagina.


return false;

Ed ecco fatto, accordion menu con effetto easing.

Songza

Tuesday, November 20th, 2007

Stamane sul discussion group di jQuery hanno segnalato questa simpatica (portentosa) web app: Songza - The music search engine and internet jukebox.

Songza’s primary purpose is to illustrate how to provide content using a “humane interface” - the term used to describe interfaces that reflect how people actually use software. Songza presents this concept through its clean, clutter-free design and transparent remote control. New features will be added in time.
— Jef Raskin

L’interfaccia è davvero notevole ed originale, innovativa, usabile e con un solo click si accede ad una decina di funzioni (play, share, rate, add to playlist … ) e tra i vari plugin utilizzati - eh sì plugin, perchè è fatta con jQuery - figura Thickbox dove per mezzo di finestre modali permette di ricavare - per esempio - la stringa per fare l’embed del loro player, qui visualizzato con la stessa tecnica (Thickbox), visto che c’ero.

Funziona in parte per mezzo delle API di YouTube, e sostanzialmente cerca tra i “video” quelli musicali e li riproduce su di un minuscolo flashplayer privato dello stream video, e quindi si sente solo l’audio. Grande idea, ottima interfaccia, stupenda webapp.

liScroll - a jQuery News Ticker made easy

Tuesday, October 16th, 2007

In questo periodo ho dovuto creare parecchi di questi news ticker(s) per delle app. intranet. Chi lo voleva che leggesse il contenuto da un XML feed, chi lo voleva largo, chi lo voleva più lento… oh ma un requisito comune no eh?! Insomma tanto ho fatto che ho deciso di farne un plugin per jQuery e lo ho chiamato liScroll (beh, scrolla una lista…) così ognuno se lo fa come vuole: si crea la solita lista non-ordinata di links, gli si dà un ID univoco, si include jQuery 1.2.1 e si inizializza così:


$(function(){
$("ul#ticker01").liScroll();
});

Opzionalmente, se non vi va bene la velocità, potete cambiare la stessa in questo modo:


$(function(){
$("ul#ticker02").liScroll({travelocity: 0.08});
});

Enjoy jQuery liScroll!

jQuery 1.2: jQuery.extend(”Awesome”)

Tuesday, September 11th, 2007

Ecco la tanto attesa release 1.2 di jQuery! Davvero una release storica perchè si aggiungono alle già impressionanti features di jQuery, altre nuove relative a Selectors, Attributes, Traversing, Manipulation, CSS, Ajax, Effects, Events, Internals.

jQuery 1.2

Tra quelle davvero notevoli e richieste, la possibilità di stoppare il metodo .animate() e questo rende felici molte persone e possibili trip sull’interaction design fino ad ora impossibili (per rapidità di sviluppo e compatibilità). Non mi resta che rimboccarmi le maniche e sperimentare ancora e ancora.

Nota: nella versione 1.2 sono state rimosse molte features della 1.1.x e cambiata di conseguenza la sintassi; se si desidera mantenere la compatibilità con la versione precedente è utile il jQuery 1.1 Compatibility Plugin per non trovarsi coi siti (propri e/o dei clienti) con orrori js e/o malfunzionamenti.

E c’è anche un’altra grossa novità: jQuery UI. Ma di questo ne parleremo dopo il 16 settembre, che già vi vedo con l’acquolina… enjoy!

XML newsticker con jQuery (Ajax)

Thursday, July 19th, 2007

Un post brevissimo, per appuntare qui un altro ‘giant leap’ nella mia curva di apprendimento di jQuery e tecnologie Ajax. Stavolta (per un progetto reale) ho realizato un paio di prototipi di newsticker(s) in Ajax con jQuery che si prendono i dati da un file XML. E’ qui la differenza. Con jQuery è molto sempice fare il parsing di un file XML ed è molto semplice applicargli degli effetti.
Fading | Scoll continuo con pausa in hover

jQuery 1.1.3: 800%+ Faster, still 20KB

Monday, July 2nd, 2007

John Resig, ideatore e lead developer di jQuery JS library, ha annunciato oggi la release della versione 1.1.3 che come potete verificare voi stessi dallo slick speed test, il DOM traversal (selettori CSS e XPath) è ora più veloce dell’800%!
In 4 punti:

1. We’re over 800% faster than we were in jQuery 1.1.2.
2. We’re the fastest framework in the most popular browser, Internet Explorer 6.
3. We’re the only framework that doesn’t give incorrect results.
4. And all of this comes at no expense to you ― jQuery is still the same 20KB that you’ve come to expect and enjoy.

Tutto ciò, con mia grande soddisfazione dimostra che quando quasi un anno fa ’scoprii’ jQuery e pensai che questa davvero sarebbe stata una javascript revolution per i designers non mi sbagliavo.

jquery.slideviewer.js

Thursday, June 21st, 2007

Dopo avere sperimentato un altro pò con la galleria di immagini realizzata nel precedente post, ho realizzato il mio primo plugin ufficiale per jquery: slideViewer.

  • 1/4
  • 2/4
  • 3/4
  • 4/4
This is the Spirit panoramic camera’s "Lookout" panorama, acquired on the rover’s 410th to 413th martian days, or sols - Feb. 27 to Mar. 2, 2005. The view is from a position known informally as "Larry’s Lookout" along the drive up "Husband Hill."
Image Credit: NASA/JPL-Caltech
Gallery powered by jQuery slideViewer 1.1

Si usa molto banalmente; si parte da una lista non ordinata (UL) con dentro delle immagini. Gli si dà un ID (id=”marspanorama”) ed una classe (class=”svw”) e in perfetto stile jQuery gli si ‘applica’ il plugin dopo avere atteso che sia il DOM sia le immagini si siano caricate:


$(window).bind("load", function() {
$("div#marspanorama").slideView();
});

27 giugno 2007: enhanced tooltips
Una cosa che mi ha portato a verificare se un altro plugin poteva essere integrato in slideViewer opzionalmente, e cioè che potesse funzionare con o senza altri plugin estendendo le sue features, è stato il numero di feedback ricevuti sulla discussion list di jQuery.

Commenti come questo, proprio dall’inventore dell’utilissimo toolTip plugin mi hanno fatto molto piacere:

Now, how cool is that? Great stuff. I love the backinout easing. I consider integration of plugins the toughest part of all plugin development, nice to see some great work getting done on that matter :-)

In un paio di giorni (non full-time eh, ho anche gli elicotteri da far volare…) ho integrato il tolTip plugin e ho reso parametrizzabili il tipo di animazione e la sua durata. Il tutorial con gli esempi sono sempre alla stessa pagina comunque posto in queste due righe:


$("div#mygalthree").slideView({
easeFunc: "bounceinout",
easeTime: 2400,
toolTip: true
});

Si tratta del comando che diamo nell’head della nostra paginetta html se vogliamo creare un galleria di immagini che abbia 2 secondi e quasi-mezzo di durata della transizione tra un foto e l’altra, e che rimbalzi per esempio tramite la funzione bounceinout. Ah appunto, vogliamo anche un tooltip un pò gajardo…

et voilà, slideViewer plugin per jQuery.

Got it, thanks. Fantastic, most lightweight/best slide carousel out there. money. :-P
— E.

Una lista di siti che usano jquery.slideviewer aggiornata al 01/04/2008:
Zachary Zavislak Photography
Di Stefano landscaping
Rival Songs

jQ stripViewer

Friday, June 8th, 2007

Come probabilmente si é capito da vari post su questo sito, tra i miei interessi al momento c’è jQuery, questo framework JS che sta rivoluzionando il mio modo (ma non solo il mio) di scrivere javascript (il behaviour di una pagina).
Inspirato dagli effetti in dynamic HTML di questo sito e dalle ormai ‘vecchie’ interfacce in Flash tutte sliding e rimbalzanti, mi sono detto: ma perchè non farne una con jQuery?

stripViewer demo

Di componenti slideShow in js o scritte anche con jQuery già ce ne sono, quindi non mi sono inventato nulla di nuovo, ma ho creato una base su cui lavorare. L’obiettivo é arrivare alla realizzazione di un plugin jQuery per visualizzare delle immagini in una mini-gallery e tale gallery dovrebbe essere parametrica cioè funzionare a prescindere dal numero e dimensione delle foto. Un motore che vada bene per foto grandi e piccole e basato sull’ormai standardizzato concetto che il javascript nelle pagine deve essere “degradabile” e cioè che se l’utente non ha l’interprete JS abilitato nel browser, semplicemente non vede gli “effettini” ma ha accesso comunque ai contenuti.

E così ho creato uno stripViewer (no, non ci sono donnine nude; per strip intendo una ‘fascia’, e cioè un’immagine lunga di cui si vede solo una porzione), e cioè un componente che ‘muove’ con un effetto easing le immagini della gallery, rivelandone solo una alla volta. Il tutto a partire da un markup semplicissimo, come questo:

<ul>
<li><img width="200" height="100" alt="307 r/c airliner" src="stripViewer01.jpg" /></li>
<li><img width="200" height="100" alt="307 r/c airliner" src="stripViewer02.jpg" /></li>
<li><img width="200" height="100" alt="307 r/c airliner" src="stripViewer03.jpg" /></li>
<!-- eccetera -->
</ul>

Ok vediamo nello specifico che ci facciamo con questa lista. La lista è una banalissima lista flottata (così tutti i LI sono orizzontali) e all’interno di ogni LI abbiamo messo un’immagine.
Ok una lista di immagini. Bene, ci mettiamo intorno una DIV col seguente stile:


#stripViewer {
position: relative;
width: 200px;
height: 100px;
overflow: hidden;
border: 5px solid red;
margin: 2em 0;
}

Bene, si vede che questa DIV funge da maschera per il suo child (la lista UL) e ne rivela solo 200px; quindi tutte le immagini le dobbiamo fare 200px? Si, fino a che non avrò reso parametrico il valore width del container della lista…
Ok e ora?
Ora creiamo l’interfaccia. Una serie di ‘bottoni’ che comandino la gallery.
Partiamo sempre da una lista. Le liste, ricordate, sono la chiave per scrivere la struttura di un sito: tutto può essere una lista.


<ul>
<li><a href="#">&nbsp;</a></li>
<li><a href="#">&nbsp;</a></li>
<li><a href="#">&nbsp;</a></li>
<li><a href="#">&nbsp;</a></li>
<!-- tanti Li quanti sono quelli della lista immagini -->
</ul>

Ok, a questo punto aggiungiamo un pochino di javascript (jQuery).

var steps = $("#stripViewer>ul > li > img").attr("width");
$("#stripTransmitter ul").find("a").each(function(i) {
$(this).append( (i+1) );
var cnt=-(steps*i);
$(this).click( function() {
$("#stripViewer ul").animate({ left: cnt}, 750, 'expoinout');
});
});

Vediamo come funziona:

var steps = $("#stripViewer>ul > li > img").attr("width");

Qui cerchiamo la dimensione delle immagini nella lista. Si, devono essere tutte della stessa larghezza (ma lavorerò anche su questo per svincolarla dalle dimensioni fisse e renderlo così parametrico).
L’attributo width delle immagini mi torna 200px.
Ok quindi gli step da fare sono tuti da 200. Ad ogni click ’scorro’ sull’asse x di 200px o multipli di esso (a seconda del tasto premuto).

$("#stripTransmitter ul").find("a").each(function(i) {
$(this).append( (i+1) );

Qui per ogni tag A nella mia lista in “div#stripTransmitter” stampo (.append()) il numero. Otteniamo così una lista con bottoni numerati da 1 a n.

E ora la parte divertente:

var cnt=-(steps*i);
$(this).click( function() {
$("#stripViewer ul").animate({ left: cnt}, 750, 'expoinout');
});

Qui la variabile cnt vale 200(steps) moltiplicato l’iteratore (i) quindi varrà 200, 400, 600 ecc.
Sul click di questi tag A nella nostra lista in “div#stripTransmitter” usiamo il metodo .animate() per dire che ci spostiamo a sinistra, quindi negativamente (-) per i pixel passati da steps , in 750 millesimi di secondo con animazione easing di tipo “expoinout”. per funzionare necessita ovviamente di jQuery Easing Plugin v1.1 ma se usassimo i metodi built-in di jQuery ci basterebbe scrivere “slow” al posto di “expoinout” e funzionerebbe lo stesso, ma senza easing effect.

Et voilà, uno stripViewer con jQuery.
Demo1: stripViewer di un’ unica immagine lunga
Demo2: stripViewer di una serie di immagini in una lista

Enjoy!