День 16 JavaScript 30 Веса Боса включал использование JavaScript для управления элементом text-shadow CSS при перемещении мыши по экрану.
Бос использовал класс героя, который представлял главный баннер веб-сайта. Этот класс CSS содержал заголовок h1. Переменная «walk» представляла собой расширение text-shadow.
const hero = document.querySelector('.hero'); const text = hero.querySelector('h1'); const walk = 100; //100px refers to max shadow extension
И прослушиватель событий, связанный с функцией «тень».
hero.addEventListener('mousemove', shadow);
Эта функция включала управление шириной и высотой смещения тени текста.
function shadow(e) { const width = hero.offsetWidth; const height = hero.offsetHeight; let {offsetX: x, offsetY: y} = e; // 'this' refers to hero. e.target can be hero or h1 -child if(this !== e.target){ x = x + e.target.offsetLeft; y = y + e.target.offsetTop; } //walk should flucuate bwt -50 and +50 const xWalk = Math.round((x / width * walk) - (walk / 2)); const yWalk = Math.round((y / height * walk) - (walk / 2)); text.style.textShadow = ` ${xWalk}px ${yWalk}px rgba(255, 0, 255, 0.7), ${xWalk * -1}px ${yWalk}px rgba(0, 255, 255, 0.7), ${yWalk}px ${xWalk * -1}px 0 rgba(0, 255, 0, 0.7), ${yWalk * -1}px ${xWalk}px rgba(255, 0, 255, 0.7) `; }
Поскольку ссылка на расширение тени изменяется, когда мышь перемещается по элементу h1, который является дочерним элементом класса hero, Бос учел это в своих вычислениях с помощью оператора if.
if(this !== e.target){ x = x + e.target.offsetLeft; y = y + e.target.offsetTop; }
Дополнительные расчеты для установки переменной «прогулка».
const xWalk = Math.round((x / width * walk) - (walk / 2)); const yWalk = Math.round((y / height * walk) - (walk / 2));
Подключение вычислений с использованием литералов шаблонов.
text.style.textShadow = ` ${xWalk}px ${yWalk}px rgba(255, 0, 255, 0.7), ${xWalk * -1}px ${yWalk}px rgba(0, 255, 255, 0.7), ${yWalk}px ${xWalk * -1}px 0 rgba(0, 255, 0, 0.7), ${yWalk * -1}px ${xWalk}px rgba(255, 0, 255, 0.7) `;
Когда Бос показал числа offsetX и offsetY с помощью консоли, я понял это лучше. Если вам расчеты показались непонятными, предлагаю посмотреть видео на YouTube.
Программа создала забавный и интересный эффект на текстовой тени, когда я перемещал мышь.
Следите за моими учебными заметками по мере того, как я продвигаюсь по JavaScript 30.
JavaScript30 — День 2. Учебные заметки
Проект «Часы включал работу с переходами CSS и использованием объекта Date JavaScript.jeffrey-amen.medium.com»