Найти тему
CyberHaus

Смайлик следящий за курсором

В этой статье мы создадим смайл в окне, который будет следить глазами за курсором мыши. А если мы захотим закрыть, окно смайл будет злиться. Итак, создадим структуру проекта, которая будет состоять из двух папок: css и js, а также из трех фалов: index.html, style.css и main.js

структура проекта
структура проекта

В файле index.html создадим начальную разметку и подключим файлы style.css и main.js

Разметка index.html
Разметка index.html

Теперь в теге body файла index.html создадим вот такой код:

html код index.html
html код index.html

DIV с классом win будет окном. DIV с классом btn-closse - это кнопка для закрытия окна, в диве будет крестик (×). DIV с классом smile будет нашим улыбающимся смайлом, а DIV с классом angry будет злым смайлом. DIV с классом eyebrow_left - это левая бровь, а DIV с классом eyebrow_right - это правая бровь. DIV с классом eye_left - это левый глаз, а DIV с классом eye_right правый. DIV с классом pupil_eye_left - это левый зрачок, а DIV с классом pupil_eye_ right правый. DIV с классом mouth - это рот нашего смайла.

Теперь перейдем к стилям в файле style.css

оформление кнопки закрытия окна
оформление кнопки закрытия окна

Уберем отступы у документа и зададим ширину и высоту документа в 100%. Затем настроим кнопку. Позицию кнопки устанавливаем в absolute, расположим кнопку с права на 6px. Цвет зададим светло-серый, а размер шрифта сделаем в 30px и сделаем его жирным. Курсор сделаем по умолчанию.

Теперь настроим окно.

Стили оформления окна
Стили оформления окна

Позиционируем окно абсолютно, сдвигаем сверху и слева на 50%. Затем при помощи свойства transform располагаем окно в центре. Устанавливаем бордюр у окна в 4px и скругление углов на 18px. Ширину и высоту делаем в 500px. Фон делаем черным.

Теперь настроим стили улыбающегося смайла.

веселый смайл
веселый смайл

Позиционируем абсолютно, сдвигаем сверху и слева на 50%. Ширину и высоту устанавливаем в 200px, скругление углов делаем 50%. Располагаем смайл по центру окна, сдвигая по вертикале и горизонтали на -50%. Фон сделаем радиальным градиентом. Центр градиента сдвинем на 65% по горизонтали и на 15% по вертикале. Цвет градиента сделаем от ярко-желтого (ffff00) к более темному (ff7700).

Перейдем к настройке стилей для злого смайла.

злой смайл
злой смайл

Позиционируем абсолютно. Cверху и слева устанавливаем в ноль. Ширину и высоту устанавливаем в 200px и скругление углов сделаем в 50%. Фон сделаем радиальным градиентом от ярко-красного (ff0000) к черному (000000). Свойство z-index установим в единицу, а прозрачность в ноль. Зададим плавный переход в 0.3 секунды.

Теперь настроим рот нашего смайла.

рот смайла
рот смайла

Позиционируем абсолютно, сдвигаем сверху и слева на 50%. Ширину устанавливаем в 140px, а высоту устанавливаем в 100px, скругление углов делаем 50%. Сдвигаем по горизонтали на -50%, а по вертикале на -40%. Сделаем бордюр снизу в 10px. Свойство z-index устанавливаем 2 и делаем плавный переход в 0.3 секунды.

Перейдем к настройке левого глаза.

левый глаз
левый глаз

Позиционируем абсолютно, сдвигаем сверху на 60px а слева на 40px. Ширину и высоту устанавливаем в 50px, скругление углов делаем 50%. Фон делаем белым (fff). Свойство overflow устанавливаем в hidden, а свойство z-index устанавливаем 4.

Точно также настроим правый глаз.

правый глаз
правый глаз

Здесь делаем всё тоже самое что и с левым глазом, только вместо свойства left используем свойство right.

Настроим стили левой брови.

левая бровь
левая бровь

Позиционируем абсолютно, сдвигаем сверху на 50px, а с лева на 34px. Ширину устанавливаем в 60px, а высоту устанавливаем в 30px, скругление углов делаем 50%. Делаем верхний бордюр в 4px черного цвета. Плавный переход сделаем в 0.3 секунды и свойство z-index ставим в 3.

Всё то же самое сделаем и для правой брови. заменив свойство left на right.

правая бровь
правая бровь

Осталось настроить стили зрачков.

зрачки
зрачки

Позиционируем абсолютно, сдвигаем сверху и слева на 50%. Располагаем каждый зрачок по центру при помощи свойства transform. Ширину и высоту устанавливаем в 20px, скругление углов делаем 50%. Цвет зададим черный (121212) и сделаем бордюр в 6px голубого цвета (9edbff). На этом со стилями всё.

Перейдем к файлу main.js и запишем код.

событие на движение мыши
событие на движение мыши

На body вешаем событие mousemove. Внутри события проверяем, имеет ли элемент. над которым перемещается курсор, класс win и, если это так, координаты курсора по горизонтали умножаем на 100 и делим на ширину клиентской части. Прибавляем к результату знак "%" и сохраняем в переменную x, то же самое делаем для переменной y, но берем координаты курсора по вертикали и делим на высоту клиентской области. Получаем все элементы с классом eye и сохраняем в переменную eye. Приходимся по полученным элементам при помощи метода forEach. Каждому элементу меняем свойства left, top и transform. Если курсор перемещается над элементом кнопки "закрыть", ничего не делаем.

событие mouseover
событие mouseover

На кнопку закрытия повесим событие mouseover и, при возникновении этого события, делаем следующее: у рта нашего смайла уберем border-radius установив это свойство в ноль, а свойство width установим в 70px. У левой брови также убираем border-radius, свойство width устанавливаем в 40px и поворачиваем на 30 градусов при помощи свойства transform, задав значение rotate(30deg). То же самое делаем и с правой бровью, но разворачиваем на -30 градусов. Уберем прозрачность у злого смайла, установив свойство opacity в единицу.

И в завершении повесим на кнопку событие mouseleave.

событие mouseleave
событие mouseleave

При возникновении этого события просто вернем все стили по умолчанию.

В результате должно получиться следующее:

Результат веселого смайла
Результат веселого смайла

А при наведении курсора на кнопку "закрыть" будет следующий результат:

результат злого смайла
результат злого смайла

Пример

Еда
6,93 млн интересуются