Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.02.2018, 18:31
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Отобразить координаты мыши над фотографией
Здравствуйте, уважаемые форумчане.
Как реализовать такую штуку: при наведении мыши на фото, в поле появляются координаты, которые относятся к фотографии. То есть, если фото 100х100, то в верхнем левом углу фотографии будет "0,0", в правом нижнем "100х100", учитывая, что реальный размер фото может по экрану быть растянут на 500х500.

Может есть какие-то jquery-либы?
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2018, 18:55
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		img {
			width: 100%;
		}
	</style>
</head>
<body>
	<div>
		<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" alt="">
	</div>
	<output></output>
</body>
<script>
	document.querySelector('img').onmousemove=function(e){
		var mb = this.naturalWidth/this.width;
		document.querySelector('output').value = Math.ceil(e.offsetX*mb)+'----'+Math.ceil(e.offsetY*mb);
	};
</script>
</html>


не нужны тут либы

Последний раз редактировалось j0hnik, 10.02.2018 в 18:59.
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2018, 19:02
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

или Math.floor вместо Math.ceil если хотите чтобы первый пиксель отображался как 0.
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2018, 19:36
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Глаза боялись - руки делали:
function MoveArea()
{
	if (mouseOnPhoto)
	{
		var e = window.event;
		var posX = e.clientX;
		var posY = e.clientY;
		
		var photo = $('#photo');
		
		var photoOffsetX = photo.offset().left;
		var photoOffsetY = photo.offset().top;
		
		var photoWidth = <?=$photoWidth;?>;
		var photoHeight = <?=$photoHeight;?>;
		
		var elemWidth = $('#photo').width();
		var elemHeight = $('#photo').height();
		
		var perWidth = (posX - photoOffsetX) / elemWidth;
		var perHeight = (posY - photoOffsetY) / elemHeight;
		
		var realX = Math.ceil( perWidth * photoWidth );
		var realY = Math.ceil( perHeight * photoHeight );
		
		//alert('pox: ' + photoOffsetX + ', poy: ' + photoOffsetY);
		
		//$('#area').css('');
		//console.log(elemWidth, elemHeight);
		
		$('#area').offset({top: posY-10, left:posX-120});
		
		var photoX = Math.floor();
		var photoY = Math.floor();
		
		$('#area').html(realX + ', ' + realY);
	}
}
</script>

<div id="area" class="fly"></div>
<img onmouseover="ShowArea()" onmouseout="HideArea()" onmousemove="MoveArea()" id="photo" src="<?=$path2?>" width="100%" />


Единственное, что пришлось добавить - это определение реального размера через PHP
Ответить с цитированием
  #5 (permalink)  
Старый 10.02.2018, 19:37
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

j0hnik,
хм... не знал про naturalWidth..
а проблема с offset'ами решается?
Ответить с цитированием
  #6 (permalink)  
Старый 10.02.2018, 19:38
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

в js есть свойство naturalWidth для img

https://developer.mozilla.org/ru/doc...MLImageElement
Ответить с цитированием
  #7 (permalink)  
Старый 10.02.2018, 19:39
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от VolodinAS Посмотреть сообщение
j0hnik,
а проблема с offset'ами решается?
что с ними?
Ответить с цитированием
  #8 (permalink)  
Старый 10.02.2018, 19:39
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Сообщение от j0hnik Посмотреть сообщение
в js есть свойство для naturalWidth для img

https://developer.mozilla.org/ru/doc...MLImageElement
А расположение элемента на странице будет влиять?
Имею в виду, на странице фото расположено не в 0,0.. Или это в Вашем коде роли не играет?
Ответить с цитированием
  #9 (permalink)  
Старый 10.02.2018, 19:51
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

так offset как раз и показывает координаты относительно элемента

вот хорошая статейка.
http://shpargalkablog.ru/2013/05/get...nside-div.html
Ответить с цитированием
  #10 (permalink)  
Старый 10.02.2018, 19:58
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Сообщение от j0hnik Посмотреть сообщение
так offset как раз и показывает координаты относительно элемента

вот хорошая статейка.
http://shpargalkablog.ru/2013/05/get...nside-div.html
Хм... Спасибо большое! Буду переделывать!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите ка вычислить координаты мыши над конкретным элементом div? shurik_shink Events/DOM/Window 1 28.03.2016 15:45
Chrome получит координаты мыши при onmousemove person Opera, Safari и др. 0 26.12.2012 11:34
Координаты мыши KupueIIIKo jQuery 18 17.02.2012 20:51
И снова про координаты мыши Jeer jQuery 15 21.03.2011 10:28
Получить координаты мыши alekciy Events/DOM/Window 2 28.12.2008 00:07