БлогNot. Javascript: движение картинки за курсором по-современному

Javascript: движение картинки за курсором по-современному

Вроде бы недавно писалось, но на базе древнего кода, так что работать толком не будет ни в новых IE 10-11, ни в новой линейке Firefox, а может, и в других браузерах, других под рукой нет.

Старый заслуженный код корёжить не хочется, сделаем движение картинки за курсором мыши по-современному и простому. Для скорости разработки реализуем только движение изображения за курсором, ведь при необходимости можно в функции getClickPosition определить более сложные правила для установки требуемых координат картинки (picture.style.left и picture.style.top), например, как-то зависящие от расстояния между рисунком и курсором мыши, как в том коде с круговым движением.

Задачу решим за 3 простых шага.

1. Поставим картинку, которая будет бегать за курсором поверх остального контента. Правда, она будет при этом занимать место в макете сайта. Зато стиль задаст заодно поведение картинки, чтобы она начинала двигаться через нужное время и не делала это слишком интенсивно:

<img id="thing" src="thing.gif" 
 style="z-index: 99; position: relative; transition: left .65s ease-in, top .65s ease-in;">

<p>Много контента, чтоб у BODY была высота, где разб<b>е</b>гаться
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1
<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1

2. Поставим в теге яваскрипта обработчик события, связанного с движением курсора мыши:

<script type="text/javascript">
 
document.body.addEventListener("mousemove", getClickPosition, false);

3. В этом же теге следом напишем функции, которые умеют вычислять настоящее положение курсора мыши, может, мои и не самые лучшие:

function getClickPosition (e) { //слушатель события движения мыши
 var picture = document.querySelector("#thing");
 var parentPosition = getPosition(e.currentTarget);
 var xPosition = e.clientX - parentPosition.x - (picture.clientWidth / 2);
 var yPosition = e.clientY - parentPosition.y - (picture.clientHeight / 2);
 picture.style.left = xPosition + "px";
 picture.style.top = yPosition + "px";
}

function getPosition(element) { //расчёт позиции элемента
 var xPos = 0;
 var yPos = 0;
 while (element) {
  if (element.tagName == "BODY") {
   var xScroll = element.scrollLeft || document.documentElement.scrollLeft;
   var yScroll = element.scrollTop || document.documentElement.scrollTop;
   xPos += (element.offsetLeft - xScroll + element.clientLeft);
   yPos += (element.offsetTop - yScroll + element.clientTop);
  } 
  else {
   xPos += (element.offsetLeft - element.scrollLeft + element.clientLeft);
   yPos += (element.offsetTop - element.scrollTop + element.clientTop);
  }
  element = element.offsetParent;
 }
 return { x: xPos, y: yPos };
}
</script>

Это всё, вот пример в работе.

 Открыть пример Движение картинки за курсором мыши в текущей вкладке (2 Кб)

картинка примера
картинка примера

В листинге предполагается, что картинка находится в той же папке, что и код, под именем thing.gif, в выложенном файле это не так.

Если надо адаптировать подобный код к браузерам без CSS3 - Prefix 3 рулит, подключите его до скрипта. Код проверен в 4 основных браузерах, сработал одинаково.

P.S. Ну и тормозят же эти новые технологии :)

09.02.2017, 17:14 [15115 просмотров]


теги: программирование javascript css графика браузеры

показать комментарии (1)