Показать сообщение отдельно
  #1 (permalink)  
Старый 29.06.2014, 23:18
Интересующийся
Отправить личное сообщение для desertFox Посмотреть профиль Найти все сообщения от desertFox
 
Регистрация: 29.08.2013
Сообщений: 20

Как правильно рассчитать координаты курсора мышки
Добрый вечер.

При наведении мышки на маленькую картинку появляется блок с увеличенной картинкой:

// При наведении на объект
function photoOn(ell, e){
  var newDivPh = document.createElement('div');
  document.body.appendChild(newDivPh);
  newDivPh.id = 'newDivPh';
  var newImg = document.createElement('img');
  newDivPh.appendChild(newImg);
  newImg.setAttribute('alt', '');
  newImg.setAttribute('src', ell);
  newImg.id = 'newImg';
  var event = (window.event) ? window.event : e;
  if(newDivPh.offsetHeight >= window.innerHeight) {
	newDivPh.style.top = (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop)+5 + 'px';
  } else if (event.clientY + newDivPh.offsetHeight > window.innerHeight) {
	newDivPh.style.top = (event.clientY - newDivPh.offsetHeight - 1 + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop) + 'px';
  } else {
	newDivPh.style.top = (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop)+5 + 'px';
  }
  
  newDivPh.style.left = (event.clientX - newDivPh.offsetWidth - 7 + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft) + 'px';
}
// При движении по объекту
function photoMove(e){
  var newDivPh = document.getElementById('newDivPh');
  var event = (window.event) ? window.event : e;
  if(newDivPh.offsetHeight >= window.innerHeight) {
	newDivPh.style.top = (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop)+5 + 'px';
  } else if (event.clientY + newDivPh.offsetHeight > window.innerHeight) {
	newDivPh.style.top = (event.clientY - newDivPh.offsetHeight - 1 + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop) + 'px';
  } else {
	newDivPh.style.top = (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop)+5 + 'px';
  }
  
  newDivPh.style.left = (event.clientX - newDivPh.offsetWidth - 7 + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft) + 'px';
}
// При убирании курсора с объекта
function photoOff(){
  var newDivPh = document.getElementById('newDivPh');
  newDivPh.parentNode.removeChild(newDivPh);
}


разметка HTML:
<a href='#' onmouseover="javascript:photoOn('/bigfoto.jpg', event);" onmousemove="photoMove(event)" onmouseout="javascript:photoOff();"><img src='/smallfoto.jpg' alt='' /></a>


Большую картинку вывожу слева:


Код нашёл в интернете и часть переделал под себя, но видимо *криво переделал* и код работает не корректно. Большая картинка сначала появляется справа и заходит за границы браузера, а уже потом перелетает в левую часть. Аналогичная ситуация и по оси "y". Это конечно происходит за доли секунд, но всё равно *скачки* заметны.

Вот такие дела). Как исправить чтобы большая картинка сразу грузилась с нужными координатами?

Последний раз редактировалось desertFox, 29.06.2014 в 23:26.
Ответить с цитированием