Для своего же сайта пишу шаблон, ну и в дальнейшем этот шаблон применю в wordpress. Дошло дело до страницы 404 и надо что то думать… В результате сделал анимированного «Мурзика» следящего за курсором.
Пример кота
Я как то уже делал котика следящего за курсором, но для страницы 404 хотелось чего нибудь посветлее, по этому нужно было на SVG нарисовать другого котика. На тот момент у меня не было подходящей программы под рукой, но на одном из стримов на youtube.com я случайным образом нарисовал котика на чиcтом HTML и CSS. Вот и появилась возможность сделать Мурзика с анимацией.
Запустил стрим, в котором заново нарисовал котика, и… Мне очень жаль, но скрипт не удалось сделать, пошел не тем путем, с математикой тупанул… три часа впустую...
Вечером того же дня решил переделать котика и разобраться с JS что бы на следующий день быстро все сделать...
Как рисовал кота.
В общем как нарисовать котика можно посмотреть тут, но я немного переделал уши. B место того что бы задавать цвета для border или фон для всего уха, я добавил тень. Абсолютно позиционированные уши убрал за голову с белым фоном с помощью z-index. Ну в принципе уши готовы:
Теперь кот моргает и шевелит ушком, осталось расшевелить глаза, а точнее зрачки.
Движение зрачков
На второй раз не стал заморачиваться со скриптом, и взял его из того же SVG котика и применил к новому коту. Во время второго стрима я код не оптимизировал. Ночью как то заглянул в этот код и решил его немного подправить в сторону производительности. В итоге вот какой код получился:
js
let eyeball = document.getElementsByClassName("eyeball"),
y_eyeball = [],
x_eyeball = [];
for (let n = 0; n < 2; n++) {
let box = eyeball[n].getBoundingClientRect();
y_eyeball.push(box.top + pageYOffset),
x_eyeball.push(box.left + pageXOffset);
}
document.addEventListener("mousemove", function () {
for (let n = 0; n < 2; n++) {
setCoords(event, eyeball[n], x_eyeball[n], y_eyeball[n])
}
})
function setCoords(event, eyeball, x_eyeball, y_eyeball) {
x = event.pageX;
y = event.pageY;
x = (x - x_eyeball) / 40;
y = (y - y_eyeball) / 40;
let translate = "translate(" + x + "px," + y + "px)";
eyeball.style.transform = translate;
};
В цикле в массивы добавил координаты глаз. Потом отслеживая движение курсора вызываю функцию для каждого глаза которая и двигает зрачки.
В этой функции получаю координаты курсора. В строках
js
x = (x - x_eyeball) / 40;
y = (y - y_eyeball) / 40;
Я от координат мыши отнимаю координаты курсора, для того что бы наводя курсор на зрачок глаз смотрел ровно. Потом делю на 40 (получил это число опытным путем) что бы замедлить движение зрачка. Если этого не делать, то зрачки будут всегда возле курсора)) В свойство transform — translate подставляю получившиеся числа и кот начинает следить за курсором как полагается.
Итог
В итоге получил что-что хотел. Но есть один минус, который можно поправить. Дело в том что при изменении размера окна кот будет косить)) Можно, конечно, отслеживать resize, но на данной странице я думаю этого можно и не делать.
Просто спросите у менеджера меня — наставника Зиновьева Александра. Обучение проходит в помесячном индивидуальном формате, и вы можете начать в любое удобное для вас время.
Кроме того, в HTML Academy вы получите профессию и даже сможете устроиться на работу с новой профессией.