PopUp draggabili con javascript

Scritto il 6 aprile 2006 da Maurizio Pelizzone

Qualche giorno fa avevo la necessità di creare una finestra draggabile via javascript, dove il contenuto potesse essere definito/ridefinito a runtime.

Anche se Edit in passato aveva pubblicato qualcosa di simile, le mie necessità spaziavano del caricare contenuti da file esterni ( aka ahah ) al generali con javascript e dom, inoltre avevo bisogno di definire le coordinate di partenza per poi modificarle in relazione ad altri eventi.

Insomma … “chi fa da se fa per tre” , “meglio soli che mal accompagnati” , “aiutati che il ciel ti aiuta

Dopo aver meditato su queste perle di saggezza popolare ho scritto qualche riga di codice …

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* JsPopUpBox v.0.3
* http://maurizio.mavida.com/
* based on great jQuery  - http://jquery.com/
* Use:
*
*** direct mode ***
*
* >only popup body without title
*JsPopUpBox( "Hello world")
*
* body e title
*JsPopUpBox( "Hello world","popup titile")
*
* set top and left position
*JsPopUpBox( "Hello world","popup titl",10,10)  
*
*** jquery  mode ***
*var objpopup = JsPopUpBox( "Hello world" , "title")
*objpopup.css("top","50px")
*objpopup.css("left","50px")
*objpopup.fadeIn("slow")
*
*/
"""#PopUpBox""position""absolute""background-color""#ccc""top""10px""left""10px""height""250px""width""400px""z-index""100""border""1px solid #000""#PopUpBox #PopUpHead,#PopUpBox #PopUpClose""background-color""#77829f""height""18px""padding-top""2px""border-bottom""1px solid #000""font-family""verdana""color""#fff""#PopUpBox #PopUpHead""font-size""14px""text-align""left""padding-left""10px""cursor""move""width""370px""#PopUpBox #PopUpClose""font-size""16px""text-align""center""font-weight""bolder""cursor""pointer""width""20px""PopUpBox_drag"'px''''px'''//abilito l'evento onmousemove e onmouseup
// esco dalla la modalità di drag
//return false;
"px""px"// esco dalla la modalità di drag
"#PopUpBox""<div id='PopUpBox'>\n""<div class='PopUpBox_drag' style='float:left' id='PopUpHead' >""</div>\n<div style='float:right' id='PopUpClose'>x</div>\n""<div style='clear:both' id='PopUpText'></div>\n""</div>\n""""#PopUpBox #PopUpHead""#PopUpBox #PopUpClose""#PopUpBox""#PopUpBox""top""px""#PopUpBox""left""px""#PopUpBox #PopUpText""#PopUpBox"

Questo è il link per vederla in azione

Per facilitarmi il compito ho usato come base jquery, una libreria che per certi apetti si avvicina come idea a prototype e che per quanto mi riguarda è diventata quasi indispensabile.

Quindi per il corretto funzionamento della popup ricordiamoci di aggiungere questa riga alla nostra pagina.

1
< s c r i p t type="text/javascript" src="http://jquery.com/src/latest/"> //< / s c r i p t >

( attenzione agli s p a z i )

Per mia scelta i css sono definiti inline direttamente da codice in modo da evitare l’ennesivo css allegato alla pagina e permettere un più rapida personalizzazione.

All’interno del codice oltre alla sezione di generazione della finestra ( che in realtà è costituito da un semplice append ) …

1
 $(document.body).append( aPopup.join("") )

… sono presenti le funzioni necessarie all’implementazione del drag che sono stata inserite all’interno con l’obbiettivo di rendere la librerie il più compatta possibile

Ma vediamo alcuni esempi di utilizzo:

1
JsPopUpBox( "Hello world")

Questo è il modo più semplice, l’unico parametro fornito è il testo contentuto nella popup

1
JsPopUpBox( "Hello world","popup titile")

Il secondo paramentro (opzionale) permette di definire il titolo della finetra.

1
JsPopUpBox( "Hello world","popup titl",10,10)

Infine se vogliamo specificare la posizione della finestra è possibile specificare altri due parametri che definiscono rispettivamente le coordinate top e left

ma come dicevo prima ho utilizzato come framework jquery che permette alcune magie molto divertenti …

1
JsPopUpBox( "Hello world").fadeIn("slow")

Questo è il codice necessatio per gestire in simpatico effetto di dissolvenza in entrata

1
JsPopUpBox( "Loading ...").find("#PopUpText").load("esempio.html")

in questo modo invece visualizziamo la scritta “Loading … ” sino a che tramite ajax/ahah la pagina esempio.html non è stata carica ed il suo contenuto inserito all’interno della nostra finistra

1
"Hello world""top""30px""left""70px"

infine per modificare a runtime la posizione della finistra è sufficente definire una variabile alla quale far riferimento nel momento un cui ridefinire alcune proprietà dei css.

commenti, suggerimenti e segnalazione di bachi sono ben accetti …

Questo articolo è stato pubblicato il 6 aprile 2006 alle 11:59 pm ed è stato letto
Archiviato sotto sviluppo.

Se questo post ti è piaciuto puoi iscriverti al mio Feed Rss e ricevere direttamente gli aggiornamenti di questo blog sul tuo FeedReader oppure puoi decidere di offrirmi un caffè.
Se ti va puoi lasciare un commento e leggere quelli degli altri, ma se preferisci puoi passare direttamente al .


6 Commenti per “PopUp draggabili con javascript”

  1. Ciao,

    ho trovato molto interessante questo articolo e volevo gentilmente chiederti, se e come era possibile poter salvare anche la posizione della window una volta definita e posizionata, associandola all’utente che la generata, like live.com o netvibes.com.

    Grazie
    Pietro

  2. la prima cosa che mi viene in mente e salvarlo direttamente nel cookie tramite javascript creando una funzione che va eseguira dopo ogni movimento.
    Questo però nel caso di pulizia dei cookie da parte del client, o cambio macchina, ci fa perdere tutte le posizioni.
    Quindi anche se decisamente più complicato, una soluzione basata su autenticazione utente + ajax ci permette di salvare i dati lato server, magari organizzando un database a questo proposito.
    Questa seconda strada penso sia quella adottata dai siti da te citati

  3. Ciao,
    è possibile tramite jquery creare una Slide show con dissolvenza?

    grazie

  4. Ho scritto un post su jquery e sui suoi plugin giunsto qualche giorno fa … ( http://maurizio.mavida.com/2006/08/21/jquery-piu-lo-uso-e-piu-mi-piace/ )

    Il plugin è già bello che fatto e se non ti piace ci sono i sorgenti per personalizzartelo ….

    Questi sono i link:
    http://www.eyecon.ro/interface/
    http://www.eyecon.ro/interface/slideshow.html

  5. Sembra ottimo, ma non riesco a farlo funzionare, forse perchè non riesco a fare un copia e incolla corretto del codice. Se puoi inviarmelo. Ti ringrazio.

  6. @Cat,
    qui hai la pagina della demo…

    se copi quello sono sicuro che funzionerà anche a te ;)

Lascia un messaggio