10/05/2012

Redirect e scroll to com jQuery

Há muito tempo (muito mesmo, em 2009) eu fiz um post no meu blog sobre scroll to – scroll animado com jQuery. Devido algumas pessoas estarem com dúvidas de como fazer isso mas após um redirect de página, estou criado esse tutorial.

Scroll to

O código do Scroll to é bem simples, como já dito em meu site:

$('html, body').animate({
    scrollTop: $("#id_da_ancora").offset().top
}, 2000);

Após o redirect

A execução continua simples, o que muda é o momento da execução do script. No modelo normal, seria executado quando acontecesse algum click (provavelmente em algum link), porém aqui será no load da página.
A única coisa que precisamos é receber via QueryString qual será o id do elemento.

OBS: caso sempre seja um elemento específico nessa tela, poderá setar diretamente no onload

Código

//verifico se existe hash na url (caso não tenha, não preciso fazer o scroll)
if (window.location.hash) {
    //pego a hash
    var hash = window.location.hash
    //animo até meu elemento
    $('html, body').animate({
        scrollTop: $(hash).offset().top
    }, 2000);
}
​

E para adicionar essa hash na minha url, basta adicionar #id_do_elemento no final do href do link. Ex: href="minhaoutrapagina.php#id_do_elemento"

Demo

Link para melhor visualização

26/09/2011

jQuery Transitions | Como fazer transições de páginas

Olá, a algum tempo que eu não posto aqui, estou mais focado na tradução da documentação, mas para vocês não me esquecerem, vim dar um oi ;) .

Recentemente comecei um job onde o cliente solicitou que o site tivesse algumas animações, não fosse paradão. Pensei comigo mesmo, acho que o cara quer uma apresentação no PowerPoint =).

Em busca dessa solução, pensei em fazer transições entre as páginas. Eis que veio na minha cabeça um efeito muito simples mas de impacto, simplesmente esmaecer a página.

Vamos ao código então. Precisamos ter nosso html bonitinho.

A marcação

HTML – Página 1

<div id="container">
    <h1>Essa é a index </h1>
    Aqui vamos ter um texto qualquer onde temos um <a class="transition" href="http://jsfiddle.net/ruanltbg/Ns97H/3/embedded/result/">link</a>. Esse link vai fazer a página esmaecer
</div>

HTML – Página 2

<div id="container">
    <h1>Essa é a segunda página </h1>
    Ela vai aparecer e vai ter um <a class="transition" href="http://jsfiddle.net/ruanltbg/WvD7Q/1/embedded/result/">link</a> para a index.
</div>

Já temos o HTMl com os links para as páginas, decidi deixar os links com uma class transition para poder identificar quais os links irão ter o efeito (pois posso ter links internos que simplesmente não irão a lugar nenhum, como âncoras).

Efeitos

Para ficar com o efeito armênico, precisamos que quando a página for abrir ela apareça devagar, ou seja, vamos usar o método fadeIn() para fazer isso. E após, precisamos pegar todos os links, aplicar o efeito na página e então redirecionar para onde o site deveria ir.

JavaScript

Vale lembrar que tudo deve estar dentro do ready e o código é igual para ambas as páginas.

$("#container").fadeIn(2000);
$("a.transition").click(function(event){
    event.preventDefault();
    link = this.href;
    $("body").fadeOut(1000, function(){
        window.location = link;
    });
});

Simples assim, agora temos uma página que mais parece um PowerPoint =D.

Demo

*ignore o header do jsfiddle que aparece

, ,
16/09/2011

Formulário dinâmico com jQuery

Bom galera , é o primeiro post aqui :P e venho trazer a vocês uma forma de otimizar as páginas de cadastro com um formulário dinâmico através do jQuery.

Qual a ideia ?

A princípio a ideia é inserir o formulário de acordo com a demanda, não sobrecarregando a página com elementos que possivelmente não iram ser usados e identificar cada campo com o atributo name diferente para recuperá-los mais tarde. Bom, acho que consegui me expressar … então vamos botar a mão na massa!

HTML

Primeiramente precisamos de nosso formulário

    <form method="get" action="processa.php">
    <table>
        <thead>
            <tr>
                <th>Item</th>
                <th>Quantidade</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><input type="text" name="item1" size="60" /></td>
                <td><input type="text" name="quantidade1" size="10" /></td>
            </tr>
        </tbody>
    </table>
    <!--Irá armazenar a quantidade de linhas-->
    <input type="hidden" value="1" name="quantidade_itens" />
    </form>

Agora precisamos de dois elementos que posteriormente irão disparar o envio do formulário e a inserção de novos inputs.

    <a href="#" id="enviar">Enviar lista de compras</a>
    <a href="#" id="mais">Add Item</a>

jQuery

Para enviar o formulário, iremos associar o seu método .submit() ao evento .click() de um dos elementos que criamos para este fim. Aqui utilizaremos o link com id enviar.

// JavaScript Document
$('#enviar').click(function(){
	$('form').submit();
});

E Agora o X da questão!

Dentro do evento .click() do link com id mais vamos:

  1. Armazenar numa variável a quantidade de linhas de nossa tabela.
  2. Inserir o código html da linha que contém os inputs com a propriedade name concatenada com o número da linha a ser inserida que armazenamos na variável next.
  3. E por fim atualizar o valor do elemento :hidden que usamos para armazenar a quantidade de linhas.
	$('#mais').click(function(){

		//recuperando o próximo numero da linha
		var next = $('#lista tbody').children('tr').length + 1;

		//inserindo formulário
		$('#lista tbody').append('<tr>' +
        	'<td><input type="text" name="item' + next + '" /></td>' +
            '<td><input type="text" name="quantidade' + next + '" /></td>' +
        '</tr>');

		//armazenando a quantidade de linhas ou registros no elemento hidden
		$(':hidden').val(next);

		return false;
	});

Mas pra que serve saber a quantidade de linhas de registros neste formulário ?

É simples, como criamos o formulário dinâmico, devemos informar à página que irá receber os dados qual a quantidade de registros que ela irá receber.

Pronto, o script já está funcionando. Mas para um melhor entendimento mostraremos como a página irá receber estes dados.

PHP

A pagina deverá conter uma variável para recuperar a quantidade de itens, (lembra aquela que comentamos ?) e um loop que terá como limite nossa variável.

Dentro dele basta recuperar os valores concatenando a propriedade name do campo com o número da repetição.

<?php

	$quantidade_itens = $_GET['quantidade_itens'];

	for ( $x = 1; $x <= $quantidade_itens ; $x++ ){

		$item = $_GET["item$x"];
		$quantidade = $_GET["quantidade$x"];

		//aqui seu código com o uso dos valores capturados

	}
?>

Veja a

Demo

O que fizemos basicamente ?

Inserimos através do método .append() os inputs com o atributo name concatenado com a quantidade de linhas mais 1, que atribuímos à variável quantidade. Sendo assim somente o final da propriedade name irá mudar , facilitando a recepção dos dados por outra página. Implementando então uma inserção dinâmica onde todos os valores poderão ser capturados.

Obs:. É bom lembra que essa é “uma” das formas de se fazer … cada um pode implementar da maneira que quiser mas o conceito , como já mencionei, é sempre o mesmo.

Atenção para a dica:

Aqui não foi associado nenhum evento aos inputs, mas se necessário, é preciso utilizar o método .live() para que este evento se estenda a todos os inputs.

Um abraço e até o próximo post!

04/07/2011

Diferença entre window.load e document.ready

Olá, o jQuery prove três métodos para trabalhar com o carregamento da página. São eles:

Hoje irei explicar qual a diferença entre o $(window).load() e o $(document).ready().

Essa diferença é bem simples. O mais conhecido $(document).ready() é utilizado para verificarmos se o DOM esta completamente carregado, caso ele esteja, podemos trabalhar tranquilamente com seus elementos, nesse caso, uma imagem não precisa estar completamente carregada, apenas precisamos ter o elemento da imagem no DOM.

Já o $(window).load() é utilizado quando precisamos que TODOS os elementos estejam carregados, ou seja, ele vai esperar todas as imagens, css, javascript e elementos externos estarem carregados para ser executado.

Qual utilizar?

Vai depender apenas da sua necessidade, no próximo post, eu irei dar um exemplo de uso do $(window).load().

Demo

Veja aqui um exemplo da diferença entre window.load e document.ready.(existe diferenças de comportamento entre navegadores, essa diferença é notada entre o comportamento do Firefox e do Chrome).

, , , ,
20/05/2011

jQuery UI datagrid

Para inaugurar meu primeiro post aqui no jquerybrasil (.org), preparei alguns demos do plugin (jquery.ui.datagrid) que desenvolvi baseado no $.ui.widget. Lembrando que não é um plugin oficial do jQuery UI. Criei para sanar minhas necessidades dentro dos projetos que sou contratado. Lembrando que a equipe do jQuery UI criou o jQuery UI Grid Project com o objetivo de juntar todo conhecimento e boas práticas dos “plugins de grid” existentes dentro do UI.
(mais…)

, ,
15/05/2011

HTML 5 Notifications – Como deixar sua aplicação muito mais interativa (gmail notifications like)

Mais uma vez me deparei com situações do dia-dia e poucas soluções. Afim de implementar uma forma de alertar os usuários de um web chat interno no ambiente de trabalho, necessitava de algo que pudesse ser fácilmente identificado como uma nova mensagem vinda do chat. Então, de cara, pensei em implementar uma solução sonora para aquelas pessoas que não estariam no browser naquele momento, mas estavam com um head-phone ou algo do tipo. Solução pronta, mas segue uma outra questão: “E quem não está com som ligado?”

Partindo desta pergunta, me pus a pesquisar sobre alternativas viáveis. Foi então que em mais uma conversa muito produtiva com meu amigo @wilkerlucio, chegamos a conclusão que utilizando HTML 5 Notifications, teríamos uma abordagem ao usuário bem mais direta. De primeira nos deparamos com uma informação que esta funcionalidade não é nem um pouco cross-browser, o que me fez ficar só um pouco desmotivado diante da poderosa arma que eu tinha em mãos.

Embora seja bem restrita ao Webkit, li em algum lugar que o firefox estaria disposto a implementar num release futuro esta funcionalidade. Quem não está entendendo muito bem, pode se lembrar do Gmail, que agora te avisa quando alguém fala com você, mesmo que você não esteja vendo o e-mail naquela hora. Ah, também você pode encontrar mais sobre o assunto procurando sobre HTML 5 Desktop Notifications.

Sem mais delongas, vamos ao que interessa:
(mais…)

, , , , ,
04/05/2011

Adicionando jQuery através de um CDN

Olá, como o Leo Balter explicou, a melhor forma de adicionar o jQuery em seu site ou sistema é adicionando ele através de um CDN.

Vantagens

- Cache: Se o visitante já tiver acessado algum site que esteja usando o mesmo CDN, ele não precisa-rá baixar o jQuery novamente, pois o jQuery já vai estar em cache. Quando houver a chamada do jQuery o navegador irá retornar um 304 “Not Modified”, assim não irá fazer o download do jQuery novamente.

- Latência: Caso seja a primeira vez que acessa o CDN, o download terá menos latência pois o CDN como seu próprio nome diz, distribui seu conteúdo por vários servidores em locais físicos diferentes. Quando uma requisição CDN é disparada, ele irár retornar do local mais próximo fisicamente (rede).

- Paralelismo: Para evitar o sobrecarregamento de servidores, os navegadores limitam o número de requisições que podem ser feitas simultâneas. Usando o CDN o jQuery pode ser baixado simultaneamente com outros arquivos, pois não estarão no mesmo host.

Conclusão

Como visto, o CDN praticamente só tem vantanges, então por que não usar? Alguns diriam que seria por causada da dependencia de outros servidores e no caso esses servidores estarem off a aplicação não irá funcionar perfeitamente. Pois bem, o Leo Balter mostrou como fazer o fallback para um arquivo local, ou seja, quando o CDN não responder ele irá forçar o download do jQuery que esta no seu servidor.

Código

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="utf-8" />
    <title>jQueryBrasil | jQuery CDN </title>

    <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
    <script>
        window.jQuery || document.write('<script src="jquery.js">\x3c/script>')
    </script>

</head>
<body>
    teste
</body>
</html>

Todos os créditos do vídeo são do Leo Balter

,
24/04/2011

Criação de novas funções do jQuery

Um mini tutorial em vídeo mostrando como podemos criar funções jQuery. É o mesmo princípio utilizado para criação de plugins no jQuery. Utilização do jQuery.fn.extend para incluir novos métodos para trabalharem no jQuery.

Nesse vídeo faço um exemplo rápido para incluir o método reset() do form sendo utilizado em objetos jQuery.

Link direto para o vídeo:

Criação de novas funções do jQuery

Link para o exemplo final no jsfiddle.net:

http://jsfiddle.net/leobalter/dWZnq/

, ,
22/04/2011

Como funciona o jQuery

Olá galerinha, como tudo na vida, temos que começar do início. Traduzi (não ao pé da letra) o post do John que está no site do jQuery, esse post é um post introdutório, ele serve para pessoas que já conhecem de JavaScript mas não conhecem o jQuery.

jQuery: O básico

Esse tutorial básico irá lhe ajudar a começar com jQuery. Podemos começar criando uma página de teste, isso você já deve saber, ela será uma página HTML qualquer. (Se você não sabe o que é uma página HTML, você deve parar aqui e mudar de área =D).

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Demo</title>
  </head>
  <body>
    <a href="http://jquerybrasil.org/">jQuery Brasil!!!</a>

    <script src="jquery.js"></script>
    <script>

    </script>
  </body>
</html>

Altere o atributo src na tag <script> para apontar para o local onde está o seu arquivo jquery.js.

EX: Considerando que seu html está na raiz do diretório. Se seu arquivo estiver dentro de uma pasta chamada js, você deve colocar src="js/jquery.js".

Você pode saber mais sobre como baixar e colocar em seu site o jQuery, na nossa área de downloads.
(mais…)

,