60289 Relatório

From Labmm2

(Difference between revisions)
Jump to: navigation, search
 
(29 intermediate revisions not shown)
Line 1: Line 1:
__TOC__
__TOC__
-
= Apresentação e Contextualização do Tema do Projecto =
+
= Apresentação e contextualização do tema do projecto =
[[File:Screen shot 2011-07-11 at 5.29.50 PM.png|right]]
[[File:Screen shot 2011-07-11 at 5.29.50 PM.png|right]]
-
O projecto desenvolvido é um portefólio. É um site que aloja informação biográfica e trabalhos da autora, que permite também a comunicação do utilizador com a pessoa em causa.<br>
+
Como parte da avaliação em época de recurso da disciplina de Laboratório Multimédia 2, teria de ser desenvolvido um projecto de tema aberto. Este projecto consiste no desenvolvimento de um site web de suporte a um portefólio pessoal de trabalhos gráficos.<br>
 +
O site aloja fotografias, desenhos, pinturas, trabalhos digitais, vídeos, informação biográfica e social.<br>
 +
O seu foco, no que toca a objectivos, está em mostrar trabalhos, capacidades, gostos e hobbies.
 +
<br><br><br><br><br>
-
 
-
<br><br><br><br><br><br><br><br><br><br>
 
= Layouts =
= Layouts =
 +
[[File:LunAbout.png|400px|center|about me]] <center>'''about me''' page</center><br>
 +
[[File:LunPhotos.png|400px|center|photos]] <center>'''photos''' page</center><br>
 +
[[File:LunDrawings.png|400px|center|drawings]] <center>'''drawings''' page</center><br>
 +
[[File:Paintings.png|400px|center|paintings]] <center>'''paintings''' page</center><br>
 +
[[File:Design.png|400px|center|design]] <center>'''design''' page</center><br>
 +
[[File:Webdesign.png|400px|center|web design]] <center>'''web design''' page</center><br>
 +
[[File:Videos.png|400px|center|videos]] <center>'''videos''' page</center><br>
 +
[[File:Contact.png|400px|center|contact me]] <center>'''contact''' page</center><br>
-
[[File:LunAbout.png|400px|center]]
+
= ''xHTML'' - estrutura implementada =
-
<center>''About Me'' page</center>
+
De entre as várias características xHTML implementadas, enunciam-se abaixo algumas que podem ser relevantes.
-
<br><br>
+
-
[[File:LunPhotos.png|400px|center]]
+
=== Vídeos embebidos ===
-
<center>''Photos'' page</center>
+
Na zona de vídeos do portfolio são embebidos dois vídeos, de um servidor externo (vimeo.com). O código externo é incluído dentro do site através de um iframe, como mostra o exemplo abaixo:
-
<br><br>
+
<pre>
 +
<iframe src="http://player.vimeo.com/video/25372802?title=0&amp;byline=0&amp;portrait=0" width="500" height="281" frameborder="0"></iframe>
 +
</pre>
-
[[File:LunAbout.png|400px|center]]
 
-
<center>''Drawings'' page</center>
 
-
<br><br>
 
-
[[File:LunAbout.png|400px|center]]
+
=== Atributo target em hiperlinks ===
-
<center>''Paintings'' page</center>
+
Alguns links são redireccionados para uma nova janela do browser, utilizando-se o atribuito 'target:
-
<br><br>
+
<pre>
 +
<a href="http://vimeo.com/25372802" target="_blank">view in HD</a>
 +
</pre>
-
[[File:LunAbout.png|400px|center]]
 
-
<center>''Design'' page</center>
 
-
<br><br>
 
-
[[File:LunAbout.png|400px|center]]
+
=== IDs e classes ===
-
<center>''Web Design'' page</center>
+
São utilizados tanto IDs como classes (por vezes, múltiplas classes) para referencias elementos do código, de acordo com cada situação. Por vezes, a conjugação dos dois tornou-se essencial:
-
<br><br>
+
<pre>
 +
<div class="content portfolio" id="zona_video">...</div>
 +
</pre>
-
[[File:LunAbout.png|400px|center]]
+
= ''CSS'' - Folhas de Estilos =
-
<center>''Videos'' page</center>
+
Na formatação do site são utilizadas várias capacidades de CSS, tais como:
-
<br><br>
+
-
[[File:LunAbout.png|400px|center]]
+
* atributos avançados CSS3 (ex: box-shadow, transform)<br>
-
<center>''Contact Me'' page</center>
+
<pre>
-
<br><br>
+
box-shadow: 0px 4px 12px #4d9da4;
 +
-webkit-box-shadow: 0px 4px 12px #4d9da4;
 +
-moz-box-shadow: 0px 4px 12px #4d
-
<br><br>
+
transform: rotate(2deg);
-
= ''XHTML'' - Estrutura Implementada =
+
-webkit-transform: rotate(2deg);
 +
-moz-transform: rotate(2deg);
 +
</pre>
-
* iframe para embeber um vídeo
+
* são utilizadas heranças de classes para referenciar elementos, por forma a simplificar o código (ex: #submenu .button)<br>
-
* target para abrir vídeos numa nova janela do browser
+
<pre>
-
* são utilizados IDs e Classes, conforme apropriado
+
<div id="submenu">
 +
    <a href="contact.html" class="button">contacts</a>
 +
</div>
 +
</pre>
-
<br><br>
+
* são utilizados filtros em identificadores de elementos (ex: input[type=text])<br>
-
= ''CSS'' - Folhas de Estilos =
+
<pre>
 +
form#contactme input[type=text],
 +
form#contactme textarea {
 +
padding: 2px;
 +
}
 +
</pre>
-
* atributos avançados CSS3 (ex: box-shadow, transform)
+
* são utilizadas fontes externas (com @font-face)<br>
-
* são utilizadas heranças de classes para referenciar elementos, por forma a simplificar o código (ex: #submenu .button)
+
<pre>
-
* são utilizados filtros em identificadores de elementos (ex: input[type=text])
+
@font-face {
-
* são utilizadas fontes externas (com @font-face)
+
    font-family:"Aaargh";
 +
    src: url(stuff/Aaargh.ttf);
 +
}
 +
</pre>
-
<br><br>
+
= ''JavaScript'' - principais scripts desenvolvidas =
-
= ''JavaScript'' - Principais Scripts Desenvolvidas =
+
Por forma a melhorar o feedback de utilização do site foram implementadas algumas funcionalidades visuais com recurso a JavaScript. Cada uma destas funcionalidades é descrita nesta secção.
-
== JavaScript puro ==
+
=== Função de 'preload' de imagens ===
 +
Esta função recebe uma lista de URLs de imagens, passadas quando o <body> é carregado. Cada URL passado como argumento é inserido num array de URLs. Por cada imagem indicada deste array é instanciado um objecto do tipo Image(), obrigando a imagem a ser carregada. Desta forma, já estará descarregada quando for utilizada, melhorando substancialmente o feedback com o utilizador.<br>
 +
<pre>
 +
function MM_preloadImages() { //v3.0
 +
  var d=document;
 +
  if(d.images){
 +
  if(!d.MM_p) d.MM_p = new Array();
 +
    var i, j = d.MM_p.length, a = MM_preloadImages.arguments;
 +
    for(i=0; i<a.length; i++)
 +
    if (a[i].indexOf("#")!=0){
 +
    d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];
 +
    }
 +
    }
 +
}
 +
</pre>
-
* onMouseOver (feedback das imagens do portfolio)
+
A função acima é chamada quando o <body> é carregado. Desta forma, as imagens passadas como parâmetro serão imediatamente carregadas e ficarão em cache, para que possam ser instantaneamente visualizadas quando for feito um roll over, por exemplo.
-
* onMouseOut (feedback das imagens do portfolio)
+
<pre>
-
* onLoad (utilizado no <body> para a funçaõ de preload seja chamada)
+
<body onLoad="MM_preloadImages('drawings/thumbs/nateh.png',
 +
                              'drawings/thumbs/002h.png',
 +
                              'drawings/thumbs/025h.png',
 +
                              'drawings/thumbs/022h.png',
 +
                              'drawings/thumbs/023h.png',
 +
                              'drawings/thumbs/055h.png',
 +
                              'drawings/thumbs/056h.png',
 +
                              'drawings/thumbs/066h.png',
 +
                              'drawings/thumbs/059h.png');">
 +
</pre>
-
<br>
 
-
== JQuery ==
 
-
* função de preload de imagens
+
=== onMouseOver e onMouseOut (feedback das imagens do portefólio) ===
-
Recebe um array de URLs de imagens, passado quando o <body> é carregado. Por imagem indicada no array é instanciada um objecto do tipo Image(), obrigando a imagem a ser carregada.
+
As imagens das grelhas do portefólio estão configuradas de forma a executar duas funções javascript: quando o rato do utilizador passa por cima delas e quando sai. A primeira modifica o atributo 'src' da própria imagem (this.src) para um URL igual, mas com a letra "h" (de hover) no fim. A segunda função, retira o "h", voltando ao URL inicial.
-
* função que mantém o menu sempre visível, mesmo quando é feito scroll vertical
+
Exemplo:
-
. sempre que é feito scroll é verificado se o número de píxeis escondidos pelo scroll (em cima) é maior do que 115 (distância do topo da página ao topo do menu). Se for verdade, é adicionada a classe "fixed" à <div> do menu. Caso contrário a classe é removida.
+
<pre>
-
* foi criada uma instrução jquery para que, no menu de contactos, as imagens tenham feedback ao passar o rato
+
<img src="drawings/thumbs/nate.png" onMouseOver="this.src='drawings/thumbs/nateh.png'" onMouseOut="this.src='drawings/thumbs/nate.png'">
-
* foi criada uma instrução jquery para que, no menu de contactos, o endereço de e-mail apareça quando se passa por cima da imagem de carta de correio
+
</pre>
-
* FancyZoom (imagens do portfolio)
+
-
* setas do teclado (imagens do portfolio)
+
-
* validação de formulários (contactos)
+
-
<br><br>
 
-
=Integração com outras tecnologias (frameworks, linguagens, etc.) =
 
-
<br><br>
+
=== Menu fixo ===
 +
O menu do site está sempre visível, mesmo quando é feito scroll na página. Esta funcionalidade foi implementada da seguinte forma:
 +
 
 +
Foi criada uma função handleScroll() que verifica se o número de píxeis escondidos pelo scroll (em cima) é maior do que 115 (distância do topo da página ao topo do menu). Se for verdade, é adicionada a classe "fixed" à <div> do menu. Caso contrário a classe é removida.<br>
 +
<pre>
 +
function handleScroll(){
 +
if (window.XMLHttpRequest){
 +
var offset = (window.pageYOffset?window.pageYOffset:document.documentElement.scrollTop);
 +
document.getElementById('head').className = (offset > (115) ? 'fixed' : '');
 +
}
 +
}
 +
 
 +
</pre>
 +
Esta função é associada ao evento de scroll através do 'event listener' da janela do browser, com o apoio do código abaixo . Desta forma, sempre que é feito scroll, a função é executada.
 +
<pre>
 +
if (window.addEventListener) {
 +
window.addEventListener('scroll', handleScroll, false);
 +
} else {
 +
window.attachEvent('onscroll', handleScroll);
 +
}
 +
</pre>
 +
 
 +
= Integração com outras tecnologias (frameworks, linguagens, etc.) =
 +
Como apoio ao desenvolvimento em Javascript foi utilizada a Framework jQuery (http://jquery.com/). Com esta Framework torna-se muito mais simples desenvolver código Javascript, dado que muitas funções que envolveriam muito código encontram-se já desenvolvidas. Para além disso, torna o código muito mais limpo e legível. Evita, por exemplo, misturar código relativo a dentro de código HTML.
 +
 
 +
=== Feedback nas imagens dos contactos ===
 +
Foi criada uma instrução jQuery para que, no menu de contactos, as imagens tenham feedback ao passar o rato. As imagens que pertencerem à classe 'jump' irão rodar ligeiramente (2º) quando o rato do utilizador passar por cima delas, criando uma sensação agradável e pouco intrusiva de feedback - função sem nome "1". Quando o rato sair de cima destas imagens, a sua posição voltará ao normal (0º) - função sem nome 2.
 +
Para que o efeito funcione completamente, a primeira função está associada (binded) ao evento "mouseover" e a segunda ao evento "mouseout".
 +
 
 +
<pre>
 +
$(".jump").bind("mouseover", function() {
 +
    $(this).css("transform", "rotate(2deg)");
 +
    $(this).css("-webkit-transform", "rotate(2deg)");
 +
    $(this).css("-moz-transform", "rotate(2deg)");
 +
}).bind("mouseout", function() {
 +
    $(this).css("transform", "rotate(0deg)");
 +
    $(this).css("-webkit-transform", "rotate(0deg)");
 +
    $(this).css("-moz-transform", "rotate(0deg)");
 +
});
 +
</pre>
 +
 
 +
=== Feedback no e-mail dos contactos ===
 +
Foi criada uma instrução jquery para que, no menu de contactos, o endereço de e-mail apareça quando se passa por cima da imagem de carta de correio.
 +
<pre>
 +
$("#email").bind("mouseover", function() {
 +
    $("#email_text").css("visibility", "visible");
 +
}).bind("mouseout", function() {
 +
    $("#email_text").css("visibility", "hidden");
 +
});
 +
</pre>
 +
 
 +
=== FancyBox (imagens do portefólio) ===
 +
O efeito de zoom das imagens do portfolio é implementado com recurso ao plugin JQuery Fancybox. Este plugin permite não só ver a imagem numa janela agradável, como ainda navegar entre as várias imagens que pertençam á mesma relação (ex: rel="drawings").
 +
O código Javscript que activa esta funcionalidade nas imagens que pertençam á classe 'thumbnail' é o seguinte:
 +
<pre>
 +
$(".thumbnail").fancybox({'transitionIn':'fade',
 +
                          'transitionOut':'elastic'});
 +
</pre>
 +
 
 +
=== Validação de formulários (contactos) ===
 +
A validação do formulário de contactos é feita com recurso a um plugin de jQuery chamado 'jQuery Validation'.
 +
Com este plugin torna-se extremamente fácil implementar-se a validação dos campos, bastando indicar de que tipo de campo se trata cada um - associando-se cada campo à classe equivalente, ex: classe 'email' - tal como indicar quais deles são obrigatórios (classe 'required').
 +
A função default do botão de 'submit' ficará descativada até que todos os campos sejam correctamente preenchidos. Assim que esta condição se verificar, a 'action' do formulário poderá ser executada.
 +
<pre>
 +
<form id="contactme" action="http://blogs.ua.pt/heldercaixinha/form_result.php" method="post">
 +
    if you want to contact me<br />
 +
    feel free to leave a message :)
 +
    <input type="text" name="name" placeholder="your name" class="required"/>
 +
    <input type="text" name="email" placeholder="your email" class="required email"/>
 +
    <textarea name="message" placeholder="the message" class="required"></textarea>
 +
    <input type="submit" value="send" />
 +
</form>
 +
</pre>
 +
 
 +
<pre>
 +
$("#contactme").validate();
 +
</pre>
 +
 
= Soluções técnicas para problemas encontrados =
= Soluções técnicas para problemas encontrados =
 +
Funções que inicialmente estavam a ser implementadas com Javascript puro, foram entretanto adaptadas para que pudessem ser implementadas com o apoio da framework jQuery.
-
<br><br>
 
= Melhoramentos futuros =
= Melhoramentos futuros =
 +
Os rollovers utilizados nas imagens do portfolio estão criados como imagens, incluindo o texto. Será interessante, no futuro, que este texto seja automaticamente gerado, evitando que tenha de ser feita imagem a imagem.
 +
Também relativamente a estes rollovers, as funções Javascript estão a ser invocadas através dos atributos onMouseOver e onMouseOut. No futuro, por forma a simplificar-se o código, deverá ser utilizado jQuery.
-
<br><br>
 
= Conclusões =
= Conclusões =
 +
A utilização da framework jQuery permitiu melhorar o resultado do site tanto em funcionalidade na escrita - por um lado permitiu implementar funcionalidades que em JavaScript puro seriam incomportáveis e de difícil desenvolvimento e por outro, permitir que o código se tornasse simples (tanto na escrita como na interpretação).
-
<br><br>
+
= Referências Web =
-
= Referências Bibliográficas =
+
[http://zootool.com/user/mpulido/ ZooTool]<br>
-
 
+
[http://fancybox.net/ FancyBox]<br>
-
<br><br>
+
-
= Anexos =
+
-
 
+
-
<br>
+

Latest revision as of 08:19, 12 July 2011

Contents


Apresentação e contextualização do tema do projecto

Screen shot 2011-07-11 at 5.29.50 PM.png

Como parte da avaliação em época de recurso da disciplina de Laboratório Multimédia 2, teria de ser desenvolvido um projecto de tema aberto. Este projecto consiste no desenvolvimento de um site web de suporte a um portefólio pessoal de trabalhos gráficos.
O site aloja fotografias, desenhos, pinturas, trabalhos digitais, vídeos, informação biográfica e social.
O seu foco, no que toca a objectivos, está em mostrar trabalhos, capacidades, gostos e hobbies.




Layouts

about me
about me page

photos
photos page

drawings
drawings page

paintings
paintings page

design
design page

web design
web design page

videos
videos page

contact me
contact page

xHTML - estrutura implementada

De entre as várias características xHTML implementadas, enunciam-se abaixo algumas que podem ser relevantes.

Vídeos embebidos

Na zona de vídeos do portfolio são embebidos dois vídeos, de um servidor externo (vimeo.com). O código externo é incluído dentro do site através de um iframe, como mostra o exemplo abaixo:

<iframe src="http://player.vimeo.com/video/25372802?title=0&byline=0&portrait=0" width="500" height="281" frameborder="0"></iframe>


Atributo target em hiperlinks

Alguns links são redireccionados para uma nova janela do browser, utilizando-se o atribuito 'target:

<a href="http://vimeo.com/25372802" target="_blank">view in HD</a>


IDs e classes

São utilizados tanto IDs como classes (por vezes, múltiplas classes) para referencias elementos do código, de acordo com cada situação. Por vezes, a conjugação dos dois tornou-se essencial:

<div class="content portfolio" id="zona_video">...</div>

CSS - Folhas de Estilos

Na formatação do site são utilizadas várias capacidades de CSS, tais como:

box-shadow: 0px 4px 12px #4d9da4;
-webkit-box-shadow: 0px 4px 12px #4d9da4;
-moz-box-shadow: 0px 4px 12px #4d

transform: rotate(2deg);
-webkit-transform: rotate(2deg);
-moz-transform: rotate(2deg);
<div id="submenu">
    <a href="contact.html" class="button">contacts</a>
</div>
form#contactme input[type=text],
form#contactme textarea {
	padding: 2px;
}
@font-face {
    font-family:"Aaargh";
    src: url(stuff/Aaargh.ttf);
}

JavaScript - principais scripts desenvolvidas

Por forma a melhorar o feedback de utilização do site foram implementadas algumas funcionalidades visuais com recurso a JavaScript. Cada uma destas funcionalidades é descrita nesta secção.

Função de 'preload' de imagens

Esta função recebe uma lista de URLs de imagens, passadas quando o <body> é carregado. Cada URL passado como argumento é inserido num array de URLs. Por cada imagem indicada deste array é instanciado um objecto do tipo Image(), obrigando a imagem a ser carregada. Desta forma, já estará descarregada quando for utilizada, melhorando substancialmente o feedback com o utilizador.

function MM_preloadImages() { //v3.0
  var d=document;
  if(d.images){
  	if(!d.MM_p) d.MM_p = new Array();
    var i, j = d.MM_p.length, a = MM_preloadImages.arguments;
    for(i=0; i<a.length; i++)
    	if (a[i].indexOf("#")!=0){
    		d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];
    	}
    }
}

A função acima é chamada quando o <body> é carregado. Desta forma, as imagens passadas como parâmetro serão imediatamente carregadas e ficarão em cache, para que possam ser instantaneamente visualizadas quando for feito um roll over, por exemplo.

<body onLoad="MM_preloadImages('drawings/thumbs/nateh.png',
                               'drawings/thumbs/002h.png',
                               'drawings/thumbs/025h.png',
                               'drawings/thumbs/022h.png',
                               'drawings/thumbs/023h.png',
                               'drawings/thumbs/055h.png',
                               'drawings/thumbs/056h.png',
                               'drawings/thumbs/066h.png',
                               'drawings/thumbs/059h.png');">


onMouseOver e onMouseOut (feedback das imagens do portefólio)

As imagens das grelhas do portefólio estão configuradas de forma a executar duas funções javascript: quando o rato do utilizador passa por cima delas e quando sai. A primeira modifica o atributo 'src' da própria imagem (this.src) para um URL igual, mas com a letra "h" (de hover) no fim. A segunda função, retira o "h", voltando ao URL inicial. Exemplo:

<img src="drawings/thumbs/nate.png" onMouseOver="this.src='drawings/thumbs/nateh.png'" onMouseOut="this.src='drawings/thumbs/nate.png'">


Menu fixo

O menu do site está sempre visível, mesmo quando é feito scroll na página. Esta funcionalidade foi implementada da seguinte forma:

Foi criada uma função handleScroll() que verifica se o número de píxeis escondidos pelo scroll (em cima) é maior do que 115 (distância do topo da página ao topo do menu). Se for verdade, é adicionada a classe "fixed" à
do menu. Caso contrário a classe é removida.
function handleScroll(){
	if (window.XMLHttpRequest){
		var offset = (window.pageYOffset?window.pageYOffset:document.documentElement.scrollTop);
		document.getElementById('head').className = (offset > (115) ? 'fixed' : '');
	}
}

Esta função é associada ao evento de scroll através do 'event listener' da janela do browser, com o apoio do código abaixo . Desta forma, sempre que é feito scroll, a função é executada.

if (window.addEventListener) {
	window.addEventListener('scroll', handleScroll, false);
} else {
	window.attachEvent('onscroll', handleScroll);
}

Integração com outras tecnologias (frameworks, linguagens, etc.)

Como apoio ao desenvolvimento em Javascript foi utilizada a Framework jQuery (http://jquery.com/). Com esta Framework torna-se muito mais simples desenvolver código Javascript, dado que muitas funções que envolveriam muito código encontram-se já desenvolvidas. Para além disso, torna o código muito mais limpo e legível. Evita, por exemplo, misturar código relativo a dentro de código HTML.

Feedback nas imagens dos contactos

Foi criada uma instrução jQuery para que, no menu de contactos, as imagens tenham feedback ao passar o rato. As imagens que pertencerem à classe 'jump' irão rodar ligeiramente (2º) quando o rato do utilizador passar por cima delas, criando uma sensação agradável e pouco intrusiva de feedback - função sem nome "1". Quando o rato sair de cima destas imagens, a sua posição voltará ao normal (0º) - função sem nome 2. Para que o efeito funcione completamente, a primeira função está associada (binded) ao evento "mouseover" e a segunda ao evento "mouseout".

$(".jump").bind("mouseover", function() {
    $(this).css("transform", "rotate(2deg)");
    $(this).css("-webkit-transform", "rotate(2deg)");
    $(this).css("-moz-transform", "rotate(2deg)");
}).bind("mouseout", function() {
    $(this).css("transform", "rotate(0deg)");
    $(this).css("-webkit-transform", "rotate(0deg)");
    $(this).css("-moz-transform", "rotate(0deg)");
});

Feedback no e-mail dos contactos

Foi criada uma instrução jquery para que, no menu de contactos, o endereço de e-mail apareça quando se passa por cima da imagem de carta de correio.

$("#email").bind("mouseover", function() {
    $("#email_text").css("visibility", "visible");
}).bind("mouseout", function() {
    $("#email_text").css("visibility", "hidden");
});

FancyBox (imagens do portefólio)

O efeito de zoom das imagens do portfolio é implementado com recurso ao plugin JQuery Fancybox. Este plugin permite não só ver a imagem numa janela agradável, como ainda navegar entre as várias imagens que pertençam á mesma relação (ex: rel="drawings"). O código Javscript que activa esta funcionalidade nas imagens que pertençam á classe 'thumbnail' é o seguinte:

$(".thumbnail").fancybox({'transitionIn':'fade',
                          'transitionOut':'elastic'});

Validação de formulários (contactos)

A validação do formulário de contactos é feita com recurso a um plugin de jQuery chamado 'jQuery Validation'. Com este plugin torna-se extremamente fácil implementar-se a validação dos campos, bastando indicar de que tipo de campo se trata cada um - associando-se cada campo à classe equivalente, ex: classe 'email' - tal como indicar quais deles são obrigatórios (classe 'required'). A função default do botão de 'submit' ficará descativada até que todos os campos sejam correctamente preenchidos. Assim que esta condição se verificar, a 'action' do formulário poderá ser executada.

<form id="contactme" action="http://blogs.ua.pt/heldercaixinha/form_result.php" method="post">
    if you want to contact me<br />
    feel free to leave a message :)
    <input type="text" name="name" placeholder="your name" class="required"/>
    <input type="text" name="email" placeholder="your email" class="required email"/>
    <textarea name="message" placeholder="the message" class="required"></textarea>
    <input type="submit" value="send" />
</form>
$("#contactme").validate();

Soluções técnicas para problemas encontrados

Funções que inicialmente estavam a ser implementadas com Javascript puro, foram entretanto adaptadas para que pudessem ser implementadas com o apoio da framework jQuery.

Melhoramentos futuros

Os rollovers utilizados nas imagens do portfolio estão criados como imagens, incluindo o texto. Será interessante, no futuro, que este texto seja automaticamente gerado, evitando que tenha de ser feita imagem a imagem. Também relativamente a estes rollovers, as funções Javascript estão a ser invocadas através dos atributos onMouseOver e onMouseOut. No futuro, por forma a simplificar-se o código, deverá ser utilizado jQuery.

Conclusões

A utilização da framework jQuery permitiu melhorar o resultado do site tanto em funcionalidade na escrita - por um lado permitiu implementar funcionalidades que em JavaScript puro seriam incomportáveis e de difícil desenvolvimento e por outro, permitir que o código se tornasse simples (tanto na escrita como na interpretação).

Referências Web

ZooTool

FancyBox
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox