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:
- Seleção dos Olhos:
- Seleciona todos os elementos com a classe
.eye.
- Seleciona todos os elementos com a classe
- Evento de Movimento do Mouse:
- Adiciona o evento
mousemove, para ativar a função sempre que o cursor se move.
- Adiciona o evento
- Otimização com
requestAnimationFrame:- Reduz a frequência de atualizações para sincronizar com a taxa de quadros do navegador, melhorando o desempenho.
- Cálculo da Posição do Olho:
- Obtém a posição central de cada olho usando
getBoundingClientRect().
- Obtém a posição central de cada olho usando
- Cálculo da Direção e Distância:
- 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.
- Calcula a direção (
- Movimento da Pupila:
- 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:
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:

