Поиграть


Фотографии знаменитостей, Герои нашего времени

Глобальный красибый tooltip на alt

Code (javascript)
  1.  
  2. // отключение вывода сообщений об ошибках
  3. window.onerror = null;
  4.  
  5. var tooltip_attr_name = "tooltip"; // наименование создаваемого tooltip’ого атрибута
  6.  
  7. // функция вызывается при загрузке страницы
  8. window.onload = function(e){
  9.         // если браузер поддерживает DOM и создание элементов, то мы запускаем механизм создания tooltip’а
  10.         if (document.createElement) tooltip.d();
  11. }
  12.  
  13. // объект tooltip
  14. tooltip = {
  15.         // создание слоя, в котором будет находится текст подсказки (точнее, TextNode, содержащий текст)
  16.         t: document.createElement("DIV"),
  17.  
  18.         // таймер
  19.         c: null,
  20.  
  21.         // флаг, указывающий показана ли сейчас на экране подсказка
  22.         g: false,
  23.  
  24.         // обработчик события onMouseMove
  25.         m: function(e){
  26.                 // если подсказка была вызвана на экран
  27.                 if (tooltip.g){
  28.                         // важно! определяем канву, учитывая режим совместимости в IE 6
  29.                         oCanvas = document.getElementsByTagName(
  30.                         (document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY"
  31.                         )[0];
  32.                         // x-координата, где произошёл вызов подсказки
  33.                         x = window.event ? event.clientX + oCanvas.scrollLeft : e.pageX;
  34.                         // y-координата, где произошёл вызов подсказки
  35.                         y = window.event ? event.clientY + oCanvas.scrollTop : e.pageY;
  36.                         // вывод подсказки на экран (задание координат)
  37.                         tooltip.a(x, y);
  38.                 }
  39.         },
  40.  
  41.         d: function(){
  42.                 // установка атрибута id со значением tooltip (который описан у нас в CSS)
  43.                 tooltip.t.setAttribute("id", "tooltip");
  44.                 // добавление к элементу body дочернего объекта tooltip
  45.                 document.body.appendChild(tooltip.t);
  46.                 /* далее мы считываем в массив все элементы, затем у тех,        которые имеют HTML атрибуты title и alt задаём      новый атрибут tooltip_attr_name (текст подсказки);              мы также задаём обработчики событий onMouseOver и onMouseOut */
  47.                 a = (document.all) ? document.all : document.getElementsByTagName("*");
  48.                 aLength = a.length;
  49.                 for (var i = 0; i < aLength; i++){
  50.                         if (a[i].getAttribute("title")){
  51.                                 a[i].setAttribute(tooltip_attr_name, a[i].getAttribute("title"));
  52.                                 a[i].removeAttribute("title");
  53.                                 if (a[i].getAttribute("alt") && a[i].complete) a[i].removeAttribute("alt");
  54.                                 tooltip.l(a[i], "mouseover", tooltip.s);
  55.                                 tooltip.l(a[i], "mouseout", tooltip.h);
  56.                         }else
  57.                                 if (a[i].getAttribute("alt") && a[i].complete){
  58.                                         a[i].setAttribute(tooltip_attr_name, a[i].getAttribute("alt"));
  59.                                         a[i].removeAttribute("alt");
  60.                                         tooltip.l(a[i], "mouseover", tooltip.s);
  61.                                         tooltip.l(a[i], "mouseout", tooltip.h);
  62.                                 }
  63.                 }
  64.                 // задаём для документа обработчик события onMouseMove
  65.                 document.onmousemove = tooltip.m;
  66.                 // прячем подсказку при скроллинге
  67.                 window.onscroll = tooltip.h;
  68.         },
  69.  
  70.         // подготавливаем подсказку для вывода на экран
  71.         s: function(e){
  72.                 // получаем объект, у которого будет показана подсказка
  73.                 d = (window.event) ? window.event.srcElement : e.currentTarget;
  74.                 // нелишняя проверка на наличее свойства tooltip_attr_name
  75.                 if (!d.getAttribute(tooltip_attr_name)) return;
  76.                 // удаляем у слоя с подсказкой первый дочерний объект (TextNode с текстом), если он вдуг не удалился раньше
  77.                 if (tooltip.t.firstChild) tooltip.t.removeChild(tooltip.t.firstChild);
  78.                 /* добавляем к элементу t (слой) новый TextNode, содержащий текст,        взятый из свойства tooltip_attr_name активного объекта */
  79.                 tooltip.t.appendChild(document.createTextNode(d.getAttribute(tooltip_attr_name)));
  80.                 // показываем подсказку с задержкой в 0,5 секунды
  81.                 tooltip.c = setTimeout("tooltip.t.style.visibility = ‘visible’;", 500);
  82.                 // устанавливаем флаг, сигнализирующий о том, что подсказка у нас на экране
  83.                 tooltip.g = true;
  84.         },
  85.  
  86.         // удаляем подсказку с экрана
  87.         h: function(e){
  88.                 // прячем подсказку
  89.                 tooltip.t.style.visibility = "hidden";
  90.                 // удаляем у слоя с подсказкой первый дочерний объект (TextNode с текстом)
  91.                 if (tooltip.t.firstChild) tooltip.t.removeChild(tooltip.t.firstChild);
  92.                 // убираем задержку
  93.                 clearTimeout(tooltip.c);
  94.                 // устанавливаем флаг
  95.                 tooltip.g = false;
  96.                 // с глаз долой…
  97.                 tooltip.a(-99, -99);
  98.         },
  99.  
  100.         // делаем так, чтобы элементы с title и alt нужным образом реагировали на события onMouseOver и onMouseOut
  101.         l: function(o, e, a){
  102.                 if (o.addEventListener) o.addEventListener(e, a, false); // было true (не работает в Opera 7)
  103.                 else if (o.attachEvent) o.attachEvent("on" + e, a);
  104.                         else return null;
  105.         },
  106.  
  107.         // устанавливаем координаты всплывающей подсказки
  108.         a: function(x, y){
  109.                 // важно! определяем канву, учитывая режим совместимости в IE 6
  110.                 oCanvas = document.getElementsByTagName(
  111.                 (document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY"
  112.                 )[0];
  113.                 w_width = window.event ? oCanvas.clientWidth : window.innerWidth;
  114.                 t_width = window.event ? tooltip.t.clientWidth : tooltip.t.innerWidth;
  115.                 t_extra_width = 7; // padding + borderWidth;
  116.  
  117.                 // y-координата
  118.                 tooltip.t.style.top = y + 8 + "px";
  119.                 // x-координата
  120.                 tooltip.t.style.left = x + 8 + "px";
  121.  
  122.                 // bugfix! делаем так, чтобы подсказка не вылазила за границы окна
  123.                 while (x + t_width + t_extra_width > w_width){
  124.                         –x;
  125.                         tooltip.t.style.left = x + "px";
  126.                         t_width = window.event ? tooltip.t.clientWidth : tooltip.t.innerWidth;
  127.                 }
  128.         }
  129. }

Теперь необходимо настроить вид подсказки. CSS элемент tooltip в моём случае выглядит так:

Code (css)
  1.  
  2. #tooltip {
  3. background:#FFFFFF;
  4. border:2px solid #ADC1CE;
  5. font:0.7em Verdana,Geneva,Arial,Helvetica,sans-serif;
  6. margin:0px;
  7. -moz-border-radius:8px;
  8. padding:3px 5px;
  9. position:absolute;
  10. visibility:hidden
  11. }

+1+2+3+4+5 (Ещё не голосовали)
Загрузка... Загрузка...

Оставьте комментарий

Блог разработчика / Софт для организаций: archicad 15 по хорошим ценам
Проведите интернет билайн тут подключать так и дешевле.
детская кровать
Want convenience? Try online grocery shopping at eFoodDepot.com