bes,
ага :yes: |
bes,
А не будет ли ваша функция нагружать систему, каждый раз вычисляя местоположение элемента и вычисляя значения положения мыши? |
не имею в виду конкретный пример.
|
ну дык и 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> |
Покопавшись, нашел более "легкий" вариант написания кода:
<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", интерпретирует его как восьмеричное число, поэтому желательно указывать во втором параметре систему счисления. Хотя можно и не указывать, это для особо придирчивых :) |
ну я лишь таким образом округлил, там итак числа, можно округлить и другими способами :)
|
Вложений: 1
Цитата:
Давно писал самописные всплывушки(см. аттач). Может стиль не супер, но сейчас посмотрел в 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"; } } |
Часовой пояс GMT +3, время: 14:12. |