//---------------------------------------------------------------------- // PCL's Nice Tooltip 1.0.0 // Copyright (C) ManHunter / PCL // manhunter.ru // // Скрипт успешно протестирован в браузерах: // - Internet Explorer 6,7; TheWorld, MyIE2/Maxthon, Avant Browser // - Opera 7,8,9 // - Mozilla Firefox 2,3; K-Meleon // - Netscape 8,9 // - Google Chrome, Safari, Iron //---------------------------------------------------------------------- // Для каких элементов устанавливать подсказки var tooltiptags = ['span']; var global_hook=0; var tooltip_lehgth=0; //---------------------------------------------------------------------- // Показать всплывающую подсказку //---------------------------------------------------------------------- function PCL_TooltipShow(e) { // Если tooltip не показывается, то и не обрабатывать ничего if (global_hook==0) { return; } // Получить событие var e = e ? e : window.event; var doc = document.documentElement; var body = document.body; // Получить текущие координаты мыши // Используется короткий метод определения IE от Gareth Heyes if ("\v" == "v") { var mouse_x = e.clientX; if (doc.clientLeft) { mouse_x -= doc.clientLeft; } if (doc && doc.scrollLeft) { mouse_x += doc.scrollLeft; } if (body && body.scrollLeft) { mouse_x += body.scrollLeft; } var mouse_y = e.clientY; if (doc.clientTop) { mouse_y -=doc.clientTop; } if (doc && doc.scrollTop) { mouse_y += doc.scrollTop; } if (body && body.scrollTop) { mouse_y += body.scrollTop; } } else { var mouse_x=e.pageX; var mouse_y=e.pageY; } var my_width = 0; var my_height = 0; // Получить размеры видимой области экрана if (typeof(window.innerWidth) == 'number') { my_width = window.innerWidth; my_height = window.innerHeight; } else if (doc && (doc.clientWidth || doc.clientHeight)) { my_width = doc.clientWidth; my_height = doc.clientHeight; } else if (body && (body.clientWidth || body.clientHeight)) { my_width = body.clientWidth; my_height = body.clientHeight; } var dd = document.getElementById('tooltipdiv'); var rr = document.getElementById('rulediv'); // Если ширина "рулетки" больше заданного размера, то установить // ширину подсказки заданного размера, иначе установить ширину // "рулетки". Это устраняет искажение размера tooltip'а у края // экрана или в горизонтально прокрученной области. if (rr.offsetWidth>tooltip_lehgth) { dd.style.width=tooltip_lehgth+'px'; dd.style.whiteSpace='normal'; } else { dd.style.width='auto'; dd.style.whiteSpace='nowrap'; } // Относительное смещение по вертикали var scrollY = 0; if (doc && doc.scrollTop) { scrollY = doc.scrollTop; } else if (body && body.scrollTop) { scrollY = body.scrollTop; } else if (window.pageYOffset) { scrollY = window.pageYOffset; } else if (window.scrollY) { scrollY = window.scrollY; } // Относительное смещение по горизонтали var scrollX = 0; if (doc && doc.scrollLeft) { scrollX = doc.scrollLeft; } else if (body && body.scrollLeft) { scrollX = body.scrollLeft; } else if (window.pageXOffset) { scrollX = window.pageXOffset; } else if (window.scrollX) { scrollX = window.scrollX; } mouse_y-=scrollY; mouse_x-=scrollX; // Получить размеры tooltip'а var div_width = dd.offsetWidth; var div_height = dd.offsetHeight; // Расчитать новые координаты tooltip'а if (mouse_y+div_height+40>my_height) { var new_y = my_height-div_height-20; } else { var new_y = mouse_y+20; } if (mouse_x+div_width+40>my_width) { var new_x = my_width-div_width-20; } else { var new_x = mouse_x+20; } with (dd) { // Установить новые координаты tooltip'а style.left=(new_x+scrollX)+'px'; style.top=(new_y+scrollY)+'px'; // Убирает неприятное мерцание в Opera style.visibility = 'visible'; } } //---------------------------------------------------------------------- // Обработчик наведения курсора мыши на элемент //---------------------------------------------------------------------- function PCL_TooltipMouseOver(e) { var x = e.target ? e.target : e.srcElement; var dd = document.getElementById('tooltipdiv'); // Записать текст подсказки в основной и вспомогательный DIV dd.innerHTML=x.getAttribute('tooltip'); var rr = document.getElementById('rulediv'); rr.innerHTML=dd.innerHTML; // Разрешить обработку перемещения мыши global_hook=1; } //---------------------------------------------------------------------- // Обработчик ухода курсора мыши с элемента //---------------------------------------------------------------------- function PCL_TooltipMouseOut(e) { var dd = document.getElementById('tooltipdiv'); // Спрятать подсказку dd.style.visibility = 'hidden'; // Запретить обработку перемещения мыши global_hook=0; } //---------------------------------------------------------------------- // Обновление tooltip'ов на странице, например при первом вызове скрипта // или после использования ваших функций AJAX //---------------------------------------------------------------------- function PCL_TooltipUpdate() { for (var i=0; i