Rogério Lino

Web development and tips

Javascript: Rate This

Rate

Quem nunca viu aquelas “5 estrelas” logo após algum artigo, foto, etc?

Pois então, esse script cria uma sequência de links () de uma quantidade pré-definida para que o visitante possa taxar, classificar, o conteúdo da página. Seu visual é totalmente customizável através de folhas de estilos (CSS).

O código está contido na própria página do exemplo, e para usá-lo basta instanciar o objeto definindo a quantidade de “estrelas” e adicioná-lo em alguma tag (append):

var r1 = new Rate(5);

r1.onclick = function() {
    // input here your action
    alert(r1.getValue());
}

r1.setDefault(3);

r1.append("example1");

Para visualizar o exemplo clique aqui.

Javascript: Fade in, Fade Out

Um efeito muito legal de transição é o fade, aonde o objeto surge gradativamente (in) ou some (out). Com o auxílio do CSS, definido pelo próprio javascript, usando opacity (alpha) conseguimos montar um exemplo.

Passando dois parâmetros a gente define o alvo (id do elemento HTML) e o tempo de demora da execução do efeito.

Código:

function fadeOut(id, time) {
    fade(id, time, 100, 0);
}

function fadeIn(id, time) {
    fade(id, time, 0, 100);
}

function fade(id, time, ini, fin) {
    var target = document.getElementById(id);
    var alpha = ini;
    var inc;
    if (fin >= ini) { 
        inc = 2; 
    } else {
        inc = -2;
    }
    timer = (time * 1000) / 50;
    var i = setInterval(
        function() {
            if ((inc > 0 && alpha >= fin) || (inc < 0 && alpha <= fin)) {
                clearInterval(i);
            }
            setAlpha(target, alpha);
            alpha += inc;
        }, timer);
}

function setAlpha(target, alpha) {
    target.style.filter = "alpha(opacity="+ alpha +")";
    target.style.opacity = alpha/100;
}

Exemplo:

fadeOut("foto", 0.6);
fadeIn("popup", 1);

Exemplo em funcionamento aqui.

Javascript: Text Shake

shake.jpg

Mais um exemplo em Javascript, agora uma função, creio que conhecida por muitos já, que tem a finalidade de embaralhar o texto contido em uma tag qualquer (embaralhar o texto após passar o mouse por cima).

Há duas maneiras de usá-la, uma aplicando em apenas uma tag o evento, e a outra, aplicando o evento a todas os elementos de mesmo “tag name”.

Ex:

shakeAll('h2');







<h3 onmouseover="shake(this)"></h3>

[update] Codigo portado para jQuery

/**
 * textShake
 * @author rogeriolino http://rogeriolino.com
 */
(function($) {

    $.fn.textShake = function(options) {

        var defaults = {
            timeIn: 20,
            timeOut: 50
        };

        var opts = $.extend({}, defaults, options);

        return this.each(function() {

            var self = $(this);
            self.running = false;

            self.mouseover(function() {
                if (!self.running) {
                    self.running = true;
                    self.content = self.text();
                    self.len = self.content.length;
                    self.init(self.i);
                }
            });

            self.init = function(i) {
                self.i = 0;
                setTimeout(
                    function() {
                        self.text(self.shakeChar(i));
                        if (i <= self.len) {
                            self.init(++i);
                        } else {
                            self.undo(0);
                        }
                    }
                    , 
                    opts.timeIn
                );
            }

            self.shakeChar = function(i) {
                return self.text().substring(0, i - 1) + randomChar() + self.text().substring(i);
            }

            self.undo = function(i) {
                setTimeout(
                    function() {
                        if (i <= self.len) {
                            self.text(self.content.substring(0, i) + self.text().substring(i));
                            self.undo(++i);
                        } else {
                            self.text(self.content);
                            self.running = false;
                        }
                    }, 
                    opts.timeOut
                );
            }

        });

        function range(ini, fin) {
            var j = 0;
            var a = new Array(fin - ini);
            for (var i = ini; i < fin; i++) {
                a[j++] = i;
            }
            return a;
        }

        function randomChar() {
            var arr = new Array();
            arr = arr.concat(range(48, 57), range(65, 90), range(97, 122)); // numbers, uppers, lowers 
            var c = arr[Math.floor(Math.random() * arr.length)];
            return String.fromCharCode(c);
        }

    }

})(jQuery);

[/update]

clique aqui para visualizar

Javascript: Code Syntax Highlight

jscc.jpg

Algo que qualquer editor que se prese tem que ter é a capacidade de facilitar a leitura do código utilizando o que se chama Syntax Highlight . O ato de distinguir partes do código com cores diferentes ajudando assim a uma melhor associação do mesmo.O que não ocorria na web até um tempo atrás, quando alguém teve a idéia de “pintar” os códigos disponibilizados na rede. Existem vários scripts para esse fim, muitos com suporte a mais de uma sintaxe (mais de uma linguagem).

E nessa mesma onda fiz um script de fácil entendimento, com a possibilidade de personalizar o código usando CSS ficando o resultado de sua preferência.

JsCC (Javascript Colored Code) por enquanto só atende a códigos Java e Javascript, mas pretendo ir incluindo outras linguagens com o passar do tempo (e ganho de tempo também).

Para visualiza-lo em funcionamento clique aqui, download disponível aqui.

Javascript: Colorpicker

colorpicker.jpg

Para quem não conhece, colorpicker é um seletor de cores. Ou seja uma “janela” com n cores predefinidas.

Esse exemplo simula o colorpicker da Macromedia, disponível no Flash, Dreamweaver, Fireworks e etc. Como o picker da Macromedia, ele possui um display para pre-visualizar a cor e o seu valor hexadecimal ao passar o mouse sobre ela (onmouseover).

Possui métodos getColor para resgatar o valor escolhido, onchange para efetuar uma ação ao escolher uma determinada cor, entre outros.

É totalmente estilizado por CSS, logo poderá deixá-lo como quiser. Personalizando-o.

Para utilizá-lo basta indexar-lo a sua página com a tag

Há algum tempo postei sobre como centralizar verticalmente e horizontalmente usando CSS, o que gerou alguns posts de visitantes revoltados porque não funcionava no IE7, fato que na época eu não tinha testado para essa versão do IE.

Então, mesmo depois de muito tempo da versão já lançada, deixo um novo post testados nos browsers Firefox 2, IE6, IE7 e Opera 9.

html, body {
    width: 100%;
    height: 100%;
    padding: 0px;
    margin: 0px;
}

#table {
    width: 100%;
    height: 100%;
    position: static;
    display: table;
    *overflow: hidden; /* hack para o IE6 e IE7 */
    *position: relative; /* hack para o IE6 e IE7 */
}

#cell {
    vertical-align: middle;
    display: table-cell;
    position: static;
    *top: 50%; /* hack para o IE6 e IE7 */
    *position: absolute; /* hack para o IE6 e IE7 */
}

#conteudo {
    top: -50%;
    width: 500px;
    margin: auto;
    position: relative;
    background: red;
}

link para o outro post e comentários

Meus Feeds Favoritos

Como de costume, eu sempre enrolado e deixando o blog por último não reparei que fui convidado pelo Bruno Dulcetti (a quase um mês) para participar de um meme, nesse para listar os blogs que mais entro.

Então lá vai:

Maujor

Henrique Costa Pereira

Meiobit

e agora o do próprio Bruno, que infelizmente até então não conhecia.

Minha lista é bem pequena mesmo, talvez por culpa do Google.

Javascript: DataGrid

Há algum tempo queria fazer algo parecido e então tirei um tempo para desenvolver, ou pelo menos tentar, uma espécie de data grid.

Este é composto por uma tabela de quantas linhas e colunas desejar, e em cada célula () contém um

e um , no qual se alternam. Para uma hora poder alterar o seu conteúdo (mostra o ) e outra apenas exibi-lo (
).

Ao clicar duas vezes (ondbclick) na célula o atributo type do é alterado, se é text altera para hidden e seu valor é colocado dentro da

(innerHTML), caso contrário se é hidden altera-se para text e o seu valor recebe o conteúdo da
(limpando-a: div.innerHTML = “”;).

Nessa primeira versão tem uma quantidade razoável de funções, possibilitando uma boa customização. Mas nada impede de utilizar CSS para conseguir um resultado mais desejado.

Para utilizar o DataGrid é bastante simples, precisa apenas informar a quantidade de linhas e colunas e aonde deseja adicioná-la.

var datagrid = new DataGrid(10, 25);
datagrid.setCelSize(10,10);
datagrid.pack("container2");

new DataGrid(linhas, colunas) : cria um novo DataGrid, com a quantidade de linhas e colunas desejada;

setCelSize(largura, altura) : seta uma largura e altura para as células (em pixels);

pack(alvo) : inclui (append) o DataGrid no alvo desejado, passando como parâmetro o id do alvo.

Para visualiza-lo funcionando clique no link a seguir:

http://dev.rogeriolino.com/exemplos/javascript/datagrid/index.html

ps: Para reportar algum bug, dúvida ou sugestões basta deixar um comentário. Caso vá usá-lo recomendo que leia o código primeiro para poder aproveitá-lo melhor.

Javascript: Password Generator

Hoje me deparei com o fato de ter que alterar a senha do FTP, e há algum tempo queria fazer um gerador de senhas.

Então não teve momento mais oportuno, com um simples script que transforma um números aleatórios em char e pronto. Está resulvido o meu problema.

var Password = function() {
    this.pass = "";
    this.generate = function(chars) {
        for (var i= 0; i<chars; i++) {
            this.pass += this.getRandomChar();
        }
        return this.pass;
    }

    this.getRandomChar = function() {
        /*
         * matriz contendo em cada linha indices (inicial e final) da tabela ASCII para retornar alguns caracteres.
         *  [48, 57] = numeros;
         *  [64, 90] = "@" mais letras maiusculas;
         *  [97, 122] = letras minusculas;
         */
        var ascii = [[48, 57],[64,90],[97,122]];
        var i = Math.floor(Math.random()*ascii.length);
        return String.fromCharCode(Math.floor(Math.random()*(ascii[i][1]-ascii[i][0]))+ascii[i][0]);
    }
}

O que tem de novo nesse script em relação ao conteúdo do blog está na funcão getRandomChar. Primeiro temos um vetor bidimensional (matriz) que guardamos em cada linha dois valores (duas colunas).

Guardamos esses dois valores porque estamos utilizando a tabela ASCII para converter número em caracter. Portanto para não termos caracteres do tipo “*”, “.”, “;” (etc) em nossa senha, temos que delimitar quais caracteres podem ser gerados. Logo o primeiro valor guarda a primeiro caracter que pode ser exibido e o segundo o último, e entre eles todos podem ser exibidos.

E para converter o valor no tão “pelejado” caracter utilizamos a função própria do Javascript da classe String ( String.fromCharCode() ), que obviamente é passado um inteiro como parâmetro e retornado um char.

Enfim o script é capaz de gerar senhas de tamanho 0 até 9999 (restringido devido que senhas muito grandes são mais demoradas para serem geradas, e pode levar a travamento do browser) contendo letras minúsculas (a até z), letras maiúsculas (A até Z), números (0 até 9) e “@” (arroba).

Password Generator

Espero que seja de bom aproveito.

Flash: Game Tutorials

Uma coisa que facina a mim e acredito que a muitos outros usuários do Flash é a posibilidade de desenvolver jogos bastante interativos com uma certa facilidade.

Então como conhecimento em excesso nunca é o bastante, segue alguns links de Tutoriais sobre criação de jogos (variados) em Flash, e links de experimentos interessantes.

OutsideOfSociety (Tutoriais - Exemplos) http://oos.moxiecode.com/

Tonypa (Tutoral - Tile Based Games) http://www.tonypa.pri.ee/tbw/start.html

Strille (Tutoriais) http://www.strille.net/tutorials/part1_scrolling.php

Andre Michelle (Exemplos) http://lab.andre-michelle.com/

GotoAndPlay (Tutoriais) http://www.gotoandplay.it/

GotoAndPlay (Tutorial - Zelda-like Game) http://www.gotoandplay.it/_articles/2003/10/zelda.php

Tutorialized (Tutoriais) http://www.tutorialized.com/tutorials/Flash/Games/1

MXStudio (Tutorial Megaman - Parte 1 e 2) http://www.mxstudio.com.br/views.tutorial.php?act=view&cid=3&aid=1128 http://www.mxstudio.com.br/views.tutorial.php?act=view&cid=3&aid=1132

GameSheep (Tutorial - Flash Racing Game) http://www.gamesheep.com/free/flash-tutorials/1-flash-racing-game-1/flash-tutorial-1-1.php

Emanuele Feronato (Tutorial) http://www.emanueleferonato.com/2006/10/29/flash-game-creation-tutorial-part-1/

Actionscript.org (Tutorial - Building Games in Flash) http://www.actionscript.org/resources/articles/52/1/Building-games-in-flash/Page1.html

Flash Dreamer (Tutorial - Into to OOP Game Design) http://www.freshvision.com.au/blog/index.php/2007/03/27/tutorial-intro-to-oop-game-design/

Flashkit (Tutorial - Scoreboard) http://www.flashkit.com/tutorials/Games/How_to_c-Nick_Kuh-771/index.php

FlashPerfection (Tutorial - Pong) http://www.flashperfection.com/tutorials/How-to-Make-the-Game-of-Pong-65527.html

Matheus Prestes (Tutorial - Tiles Map - português) http://www.freewebs.com/matheusprestes/MapTiles/html/TilesMap.html