JavascriptTutorias

Animação Interativa dos Olhos

Animação Interativa dos Olhos
Animação Interativa dos Olhos

 

 

Introdução

Neste tutorial,  vou mostrar como criar uma Animação Interativa dos Olhos usando na animação apenas CSS e JavaScript.

Nesta animação divertida e interativa, os olhos seguem o cursor do seu mouse. Neste tutorial, vamos explorar como realizar essa animação usando HTML, CSS e JavaScript. Não só a animação é cativante e envolvente, mas também incluímos um efeito de piscar para dar um toque realista à interação. Seja você um iniciante ou um desenvolvedor experiente procurando por um novo projeto, esta é uma ótima maneira de praticar e aprimorar suas habilidades de front-end.

 

Criando o Animação Interativa dos Olhos  em Javascript

 

Primeiro passo você deverá criar a estrutura da página, para isso crie um arquivo html contendo  o seguinte código :

 

<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Interactive Animated Eyes</title>
</head>
<body>
    <script>
    </script>
</body>
</html>

 

Logo após crio a estrutura do olho que será animado:

 

    <div class="eye-container">
        <div class="eye">
            <div class="pupil"></div>
            <div class="eyelid"></div>
        </div>
        <div class="eye">
            <div class="pupil"></div>
            <div class="eyelid"></div>
        </div>
    </div>

 

No código acima implementei a parte da estrutura dos olhos que serão animados, foi criado o olho, a pupila e a pálpebra do olho.

 

Depois adiciono o css responsável pela estilização do olho e pela animação de piscar :

 

 body {
            background-color: #121f32;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .eye-container {
            display: flex;
            gap: 30px;
        }
        .eye {
            width: 100px;
            height: 100px;
            background-color: rgb(255, 216, 98);
            border: 4px solid #000;
            border-radius: 50%;
            position: relative;
            display: flex;
            justify-content: center;
            align-items: center;
            box-shadow: 0 5px #666;
            overflow: hidden;
        }
        .pupil {
            width: 25px;
            height: 25px;
            background-color: #000;
            border-radius: 50%;
            position: absolute;
            transition: transform 0.1s ease-out;
        }
        .eyelid {
            position: absolute;
            top: 0;
            width: 100%;
            height: 100%;
            background-color: rgb(85, 89, 95);
            border-radius: 50%;
            animation: blink 5s infinite;
            transform-origin: top;
            transform: scaleY(0);
            pointer-events: none;
        }
        @keyframes blink {
            0%,
            92%,
            100% {
                transform: scaleY(0);
            }
            94%,
            96% {
                transform: scaleY(1);
            }
        }

 

 

Por ultimo adiciono o script responsável por fazer o olho seguir o ponteiro do Mouse:

 

  <script>
        const eyes = document.querySelectorAll('.eye');
        document.addEventListener('mousemove', (event) => {
            requestAnimationFrame(() => {
                eyes.forEach(eye => {
                    const pupil = eye.querySelector('.pupil');
                    const rect = eye.getBoundingClientRect();
                    const eyeX = rect.left + rect.width / 2;
                    const eyeY = rect.top + rect.height / 2;
                    const dx = event.clientX - eyeX;
                    const dy = event.clientY - eyeY;
                    const angle = Math.atan2(dy, dx);
                    const distance = Math.min(35, Math.hypot(dx, dy));
                    pupil.style.transform = `translate(${Math.cos(angle) * distance}px, ${Math.sin(angle) * distance}px)`;
                });
            });
        });
    </script>

 

Uma breve explicação do código Javascript criado:  

  1. Seleção dos Olhos:
    const eyes = document.querySelectorAll('.eye');
    • Seleciona todos os elementos com a classe .eye.
  2. Evento de Movimento do Mouse:
    document.addEventListener('mousemove', (event) => {
    • Adiciona o eventomousemove,  para ativar a função sempre que o cursor se move.
  3. Otimização com requestAnimationFrame:
    requestAnimationFrame(() => {
    • Reduz a frequência de atualizações para sincronizar com a taxa de quadros do navegador, melhorando o desempenho.
  4. Cálculo da Posição do Olho:
    const rect = eye.getBoundingClientRect();
    const eyeX = rect.left + rect.width / 2;
    const eyeY = rect.top + rect.height / 2;
    • Obtém a posição central de cada olho usando getBoundingClientRect().
  5. Cálculo da Direção e Distância:
    const dx = event.clientX - eyeX;
    const dy = event.clientY - eyeY;
    const angle = Math.atan2(dy, dx);
    const distance = Math.min(35, Math.hypot(dx, dy));
    • Calcula a direção (angle) e a distância (distance) do cursor em relação ao centro do olho.
    • Limita a distância máxima a 35 pixels.
  6. Movimento da Pupila:
    pupil.style.transform = `translate(${Math.cos(angle) * distance}px, ${Math.sin(angle) * distance}px)`;
    • Move a pupila com base na direção e na distância calculadas, garantindo que ela siga o cursor.

 

 

Você pode visualizar a animação no link abaixo:

Interactive Animated Eyes 

 

Deixo aqui um vídeo curto do processo de criação da animação:

 

 

 

 

Conclusão

Este projeto não só adiciona um elemento divertido ao seu site, mas também é uma excelente maneira de melhorar suas habilidades em HTML, CSS e JavaScript. Experimente adicionar outros efeitos ou personalizações para tornar a animação ainda mais envolvente.

 

Código fonte do tutorial  da animação em Javascript:

Código Fonte

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *