Criar thumbnail animado usando CSS Sprites e JQuery

Thumbnails (miniaturas) são uma das peças mais ricas de usabilidade que a era digital criou. Em essência, um thumbnail é uma prévia, uma promessa do que você verá ao clicar no link. Um pequeno vislumbre com menos dados, mais rápido para carregar e exige menos espaço em tela do que o conteúdo a qual ele direciona. Eles são ideais para galerias de imagens, longos conteúdos de texto e principalmente de vídeos?

Para entender mais sobre a possibilidade de criar thumbnails animados, vamos demonstrar exemplos utilizando CSS básico e um pouco de jQuery.

Como Utilizar o CSS Sprites

Definição

CSS Sprite é uma técnica que usa um Sprite para fazer uma “troca de imagem”, ou seja, o deslocamento de posição do mapa de imagem que irá fazer no caso a “animação”. Essa técnica permite que utilizemos várias imagens em uma só, assim economizamos número de requisições no servidor e quantidade de imagens.(Fonte: CSS Sprite – iMasters)

Hoje em dia, as velocidades de download não são um problema para os desenvolvedores web. É claro que os arquivos pequenos são ainda desejáveis, mas o verdadeiro desempenho atingido na maioria dos sites é o número de solicitações HTTP. Cada vez que seu site carrega um asset, o navegador faz uma solicitação HTTP que é enviada, processada e depois volta. Verifique, você verá que a maior parte do atraso em seu site não tem nada a ver com o tamanho da imagem, e sim com a espera de uma resposta do servidor. Portanto, ao utilizar a técnica do SPRITE CSS diminuímos consideravelmente o número de requisições no servidor, otimizando a velocidade do site.

Construindo um thumbnail animado usando imagens

Para construir esse thumbnail, faremos a utilização de um pouco de jQuery, podendo usar a posição do cursor para determinar o pontos de movimentação das imagens ou, mais precisamente, como e quando as imagens irão se interpolar em relação à posição do mouse. Veja o exemplo:

A primeira coisa que precisamos fazer é “costurar” algumas imagens. Eu vou estar ligando para este belo vídeo da Noruega por Fuglefjellet. Capturo 10 quadros-chave de uma seção do que o vídeo que eu gosto e juntou-as em uma única imagem usando o Photoshop. Esse exemplo pode ser feito com outras imagens que possam ser exibidas em sequencia e transmitam um efeito de movimento.

Agora que a imagem está pronta, a segunda coisa que precisamos fazer é criar um arquivo HTML simples, com um link para o vídeo que estamos criando a miniatura:

<a id="preview" href="http://vimeo.com/8736190">Western Norway at sunrise</a>

Em seguida, precisamos importar jQuery no Head da página:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js" type="text/javascript"></script>

Então usaremos o jQuery para definir o tipo de exibição (bloco) a largura (500px para coincidir com a largura de um “quadro” da nossa imagem), a altura (203px) e do fundo do nosso link:

$(document).ready(function() {
    $('#preview')
        .css('display', 'block')
        .css('width', 500)
        .css('height', 203)
        .css('background', 'url("our-image.jpg") no-repeat');
});

Finalmente, é preciso definir o fundo para que a parte correta da nossa imagem é exibida; cada um ‘quadro’ tem 500 pixels de largura, de modo a mostrar o primeiro quadro da posição x da imagem de fundo deve ser 0px, para mostrar a segunda será -500px, o terceiro será -1000px e assim por diante.

Usando uma função de manipulador mousemove, podemos calcular a posição relativa do cursor sobre o elemento em percentagem; subtrair a posição de deslocamento do elemento de pageX do evento (esta trata a extremidade esquerda do elemento como 0), então dividir pela largura do elemento.

Tendo feito isso, calcula-se a posição da imagem de fundo através da multiplicação da percentagem em relação a posição o tamanho total da imagem composta. O resultado final deve ser múltiplo da largura do elemento (500px) para que se divida o resultado por esse valor, arredonde para baixo usando Math.floor(), em seguida, multiplique de volta para anular a divisão; Se não fizermos isso a imagem simplesmente irá rolar 1px de cada vez.

Subtraímos o valor resultante de 0, de modo que todos os valores possíveis fiquem negativos.

Em seguida, aplique o background-position com CSS:

.mousemove(function(e) {
    var elementWidth = 500;
    var mousePercent = (e.pageX - this.offsetLeft) / elementWidth;
    var bgPosition = 0 - Math.floor((mousePercent * 5000) / elementWidth) * elementWidth;
    $(this).css('background-position', '-' + bgPosition + 'px 0px');
});

O código completo é apresentado assim:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>demo</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        $('#preview')
        .css('display', 'block')
        .css('width', 500)
        .css('height', 203)
        .css('background', 'url("landscape.jpg") no-repeat')
        .mousemove(function(e) {
            var elementWidth = 500;
            var mousePercent = (e.pageX - this.offsetLeft) / elementWidth;
            var bgPosition = 0 - Math.floor((mousePercent * 5000) / elementWidth) * elementWidth;
            $(this).css('background-position', bgPosition + 'px 0px');
        });
    });
    </script>
</head>
<body>
    <a href="http://vimeo.com/8736190" id="preview">Western Norway at sunrise</a>
</body>
</html>

Conclusão

Algumas coisas devem ser consideradas: em primeiro lugar, seria possível a criação de uma miniatura com centenas de ‘frames’, mas ao mesmo tempo será a animação muito boa, ela também vai levar um longo tempo para carregar; em segundo lugar, a detecção de posição do mouse simplesmente não vai funcionar em um dispositivo touchscreen, portanto, embora esta técnica não vai realmente prejudicar a usabilidade, em um dispositivo móvel que você não está ganhando nada.

A finalidade de um thumbnail é apresentar ao usuário com mais informações sobre o que está na outra extremidade de um link, e quando o recurso que você está ligando é um vídeo, uma imagem única, muitas vezes não há informações suficientes. Estendendo, a técnica do sprite CSS é uma maneira simples e eficaz para visualizar mais do que um único quadro.

O construtor de site do Wime, oferece recursos e possibilidades que vão além dos componentes básicos oferecidos pela plataforma, possibilitando que códigos em HTML, CSS e até mesmo Javascript possam ser incluídos no seu site.

Login



Esqueceu sua senha?
X

Crie seu site!



.wime.com.br

X