Javascript.RU

Создать новую тему Закрытая тема
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.08.2012, 18:14
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

bes,

ага
  #12 (permalink)  
Старый 26.08.2012, 20:47
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

bes,

А не будет ли ваша функция нагружать систему, каждый раз вычисляя местоположение элемента и вычисляя значения положения мыши?
  #13 (permalink)  
Старый 26.08.2012, 20:48
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

не имею в виду конкретный пример.
  #14 (permalink)  
Старый 26.08.2012, 21:42
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

ну дык и e.clientX(Y) каждый раз вычисляются и ничего + просчитываются не все точки, по которым прошёл курсор
<div style="background: lightgrey">быстро проведи мышью по мне</div><div></div>
<script>
document.body.children[0].onmousemove = function (e) {
	e = e || event;
	this.nextSibling.innerHTML += e.clientX + '; ' + e.clientY + '<br>'
}
</script>
  #15 (permalink)  
Старый 26.08.2012, 23:37
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Покопавшись, нашел более "легкий" вариант написания кода:

<style>
	div {
		position: absolute;
		left: 40%;
		top: 40%;
		width: 50px;
		height: 50px;
		background: lightgreen;
		padding: 20px;
	}
</style>


<div>div</div><span></span>

<script>
window.onload = function () {

	document.body.children[0].onmousemove = function (e) {
		e = e || event;
		var coords = this.getBoundingClientRect();
		var x = Number(e.clientX - coords.left);
		var y = Number(e.clientY - coords.top);
		this.nextSibling.innerHTML = x + '<br>' + y;
	}
}
</script>


Так будет быстрее, потому как parseInt() помимо преобразования строки в число, еще анализирует ее, что занимает дополнительное время
Кстати, ParseInt согласно ES3, если получает число начинающееся с "0", интерпретирует его как восьмеричное число, поэтому желательно указывать во втором параметре систему счисления. Хотя можно и не указывать, это для особо придирчивых
  #16 (permalink)  
Старый 26.08.2012, 23:41
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

ну я лишь таким образом округлил, там итак числа, можно округлить и другими способами
  #17 (permalink)  
Старый 27.08.2012, 00:15
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

Сообщение от dmitry111 Посмотреть сообщение
Они показывают значения относительно окна браузера. И если элемент находится в центре окна и не равен размерам окна, то вывод значений этих свойств некорректен
Если дело в этом, и тебе нужно нормально считывать координаты элемента.

Давно писал самописные всплывушки(см. аттач). Может стиль не супер, но сейчас посмотрел в FF и в IE9, все работает, как и прежде. Для оперы только надо изменить поправку и снести все касающееся IE6-IE7.

//вычисляем координаты элемента и относительно их устанвливаем подсказку
		var coords=getOffset(this);
		document.getElementById(help_up_id).style.top=coords['top'] - 85 + 'px'
		document.getElementById(help_up_id).style.left=coords['left'] - 14 + 'px';
		
		//поправки для нехороших браузеров.
		if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
		{
			document.getElementById(help_up_id).style.top=coords['top'] - 73 + 'px';
			document.getElementById(help_up_id).style.left=coords['left'] - 8 + 'px';
		}
		
		if (/MSIE (7).+Win/.test(navigator.userAgent))
		{
			document.getElementById(help_up_id).style.top=coords['top'] - 70+ 'px';
		}
		
		var ua = navigator.userAgent.toLowerCase();
		isOpera = (ua.indexOf("opera") != -1); 
		if (isOpera){
			document.getElementById(help_up_id).style.top=coords['top'] - 73 + 'px';
		}
		
		//Подсказкам для ссылок небольшая поправка координат вправо и вниз. 
		if(this.tagName=='A')
		{
			var help_top=parseInt(document.getElementById(help_up_id).style.top);
			var help_left=parseInt(document.getElementById(help_up_id).style.left);
			
			//поправки для нехороших браузеров.
			if (isOpera){
				document.getElementById(help_up_id).style.top=help_top +6 + 'px';
				document.getElementById(help_up_id).style.left=help_left +35 + 'px';
			}
			else if
			(/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
			{
				document.getElementById(help_up_id).style.top=help_top +6 + 'px';
				document.getElementById(help_up_id).style.left=help_left +35 + 'px';
			}
			else if
			(/MSIE (7).+Win/.test(navigator.userAgent))
			{
				document.getElementById(help_up_id).style.top=help_top + 6 + 'px';
				document.getElementById(help_up_id).style.left=help_left +35 + 'px';
			}
			else
			{
			document.getElementById(help_up_id).style.top=help_top + 19 + "px";
			document.getElementById(help_up_id).style.left=help_left + 35 + "px";
			}
		}
Изображения:
Тип файла: jpg 1.jpg (99.8 Кб, 5 просмотров)

Последний раз редактировалось lancer, 27.08.2012 в 00:20.
Закрытая тема



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX + Firefox некорректное отображение checkbox shu7 Firefox/Mozilla 2 26.06.2015 14:23
Как стереть содержимое поля INPUT по клавише Esc? bug FireFox? Маэстро Firefox/Mozilla 4 20.06.2011 15:55
тег <audio> в Opera, Chrome, Firefox Magneto Javascript под браузер 12 25.11.2010 15:12
Peppy и Firefox Cr@ZyBoY Библиотеки/Тулкиты/Фреймворки 13 14.02.2010 20:38
Проблемы с MouseMove в FireFox slim-v Events/DOM/Window 5 05.06.2009 02:44