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: