Diseñe Smiley Face Eyes que sigan el cursor del mouse usando CSS y JS

Una cara animada usando HTML y CSS y JavaScript. Donde la cara seguirá al cursor. Es uno de los efectos simples de CSS y JavaScript. Para un principiante, es uno de los mejores ejemplos para aprender el concepto de pseudo-elementos.

Enfoque: la idea básica de una cara proviene de CSS. Aquí, toda la animación se realizará con CSS y un poco de Javascript. Principalmente mediante el uso de CSS, haremos la cara de dibujos animados y mediante Javascript, ayudaremos a que fluya el globo ocular de la cara. La idea principal es que los globos oculares de las caras se muevan hacia el puntero del mouse y cuando el mouse se acerca a la cara, cierra la boca, excepto que abre la boca y sonríe.

Código HTML: Usando HTML haremos la estructura básica de la cara. Tomaremos algunos divs y les daremos un nombre de clase, ya que podemos decorarlo en el futuro.

  •  

html

<div class="face">
    <div class="eyes">
        <div class="eye"></div>
        <div class="eye"></div>
    </div>
</div>
<div class="face">
    <div class="eyes">
        <div class="eye"></div>
        <div class="eye"></div>
    </div>
</div>

Código CSS: al usar CSS, definiremos el área de los divs particulares, luego agregaremos algún atributo CSS como radio de borde, color de fondo para hacer que el área sea redonda y una cara de dibujos animados. Además, debemos tener que usar algún efecto de desplazamiento para hacer que estas caras sean más atractivas y vivas, como cuando el puntero del mouse se acerca a la cara y cierra la boca.

  •  

css

<style type="text/css">
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    body {
        /* Here mainly the body background color,
            height, width, position, size of fonts etc
            fixed*/
        display: flex;
        justify-content: center;
        align-items: center;
        min-height: 100vh;
        height: 100%;
        width: 100%;
        background-repeat: unset;
        font-size: 50px;
    }
    /*In this part we will make the round shape
        of the face,and the basic structure of face
            like add some color of face,height,width etc*/
    .face {
        position: relative;
        width: 200px;
        height: 200px;
        border-radius: 50%;
        background: green;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .face::before {
        /*In this part we will make
            the mouth of the face*/
        content: "";
        position: absolute;
        top: 120px;
        width: 150px;
        height: 70px;
        background: yellow;
        border-bottom-left-radius: 70px;
        border-bottom-right-radius: 70px;
        transition: 0.5s;
    }
    .face:hover::before {
        /*Here we will add the hover effects.
            Like when the cursor will came on the mouth the
            mouth will closed that means is radius
            will be decreased*/
        top: 120px;
        width: 150px;
        height: 20px;
        background: yellow;
        border-bottom-left-radius: 0px;
        border-bottom-right-radius: 0px;
    }
    /*In this part we will make
        the eyes of the face*/
    .eyes {
        position: relative;
        top: -30px;
        display: flex;
    }
    .eyes .eye {
        position: relative;
        width: 60px;
        height: 60px;
        display: block;
        background: #fff;
        margin: 0 15px;
        border-radius: 50%;
    }
    .eyes .eye::before {
        content: "";
        position: absolute;
        top: 50%;
        left: 25%;
        transform: translate(-50%, -50%);
        width: 40px;
        height: 40px;
        background: #000;
        border-radius: 50%;
    }
</style>

JavaScript: Aquí también usamos un poco de JavaScript ya que el globo ocular puede moverse hacia el puntero del mouse. En primer lugar, crearemos una función llamada globo ocular. y luego declarar variables. En este código no tenemos nada que imprimir, por lo que no usaríamos document.write , pero tenemos que rotar el globo ocular, por lo que usamos el nombre de clase ‘eye’ para rotar y usamos la función style.transform como «rotar(«+ rot+”grados)”. Y finalmente, nuestro ojo estará listo para moverse.

  •  

javascript

<script>
    document.querySelector(
      "body").addEventListener("mousemove", eyeball);
    function eyeball() {
        var eye = document.querySelectorAll(".eye");
        eye.forEach(function (eye) {
            let x =
                eye.getBoundingClientRect().left +
                eye.clientWidth / 2;
           
            let y =
                eye.getBoundingClientRect().top +
                eye.clientHeight / 2;
            let radian =
            Math.atan2(event.pageX - x, event.pageY - y);
            let rot = radian * (180 / Math.PI) * -1 + 270;
            eye.style.transform =
              "rotate(" + rot + "deg)";
        });
    }
</script>

Ejemplo: Aquí está el código completo de HTML CSS y JavaScript

html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <time></time>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
            body {
                /* Here mainly the body background color,
            height, width, position, size of fonts etc
            fixed*/
                display: flex;
                justify-content: center;
                align-items: center;
                min-height: 100vh;
                height: 100%;
                width: 100%;
                background-repeat: unset;
                font-size: 50px;
            }
            /*In this part we will make the round shape
        of the face,and the basic structure of face
            like add some color of face,height,width etc*/
            .face {
                position: relative;
                width: 200px;
                height: 200px;
                border-radius: 50%;
                background: green;
                display: flex;
                justify-content: center;
                align-items: center;
            }
            .face::before {
                /*In this part we will make
            the mouth of the face*/
                content: "";
                position: absolute;
                top: 120px;
                width: 150px;
                height: 70px;
                background: yellow;
                border-bottom-left-radius: 70px;
                border-bottom-right-radius: 70px;
                transition: 0.5s;
            }
            .face:hover::before {
                /*Here we will add the hover effects.
            Like when the cursor will came on the mouth the
            mouth will closed that means is radius
            will be decreased*/
                top: 120px;
                width: 150px;
                height: 20px;
                background: yellow;
                border-bottom-left-radius: 0px;
                border-bottom-right-radius: 0px;
            }
            /*In this part we will make
        the eyes of the face*/
            .eyes {
                position: relative;
                top: -30px;
                display: flex;
            }
            .eyes .eye {
                position: relative;
                width: 60px;
                height: 60px;
                display: block;
                background: #fff;
                margin: 0 15px;
                border-radius: 50%;
            }
            .eyes .eye::before {
                content: "";
                position: absolute;
                top: 50%;
                left: 25%;
                transform: translate(-50%, -50%);
                width: 40px;
                height: 40px;
                background: #000;
                border-radius: 50%;
            }
        </style>
    </head>
    <body>
        <!-- In this divs take separate classes named eye,
            face which will help to make the animation,
            because the whole animation will be
            made by using css-->
        <div class="face">
            <div class="eyes">
                <div class="eye"></div>
                <div class="eye"></div>
            </div>
        </div>
        <div class="face">
            <div class="eyes">
                <div class="eye"></div>
                <div class="eye"></div>
            </div>
        </div>
        <!-- Here the div ends.That
            means the face part ends-->
        <script>
            document.querySelector(
            "body").addEventListener("mousemove", eyeball);
            function eyeball() {
                var eye = document.querySelectorAll(".eye");
                eye.forEach(function (eye) {
                    let x =
        eye.getBoundingClientRect().left + eye.clientWidth / 2;
                    let y =
        eye.getBoundingClientRect().top + eye.clientHeight / 2;
                    let radian =
                Math.atan2(event.pageX - x, event.pageY - y);
                    let rot =
            radian * (180 / Math.PI) * -1 + 270;
                    eye.style.transform =
                    "rotate(" + rot + "deg)";
                });
            }
        </script>
    </body>
</html>

Producción: 
 

Publicación traducida automáticamente

Artículo escrito por chalti y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *