Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Всплывающая подсказка


Автор: Jax 26.1.2006, 11:46
Есть такой код:
Код
ToolTip.offsetX=20; //смещения подсказки от курсора
ToolTip.offsetY=10; //
function ToolTip(obj, text) {
  if(!obj||obj.nodeType!=1) throw "Illigal argument exception"; //обьект к кому привязываем подсказку
  //-- Разметка подсказки ---
  var tip=document.createElement("DIV");
  tip.className="tool_tip";
  tip.innerHTML=text;
  document.body.appendChild(tip);
  //-- события --
  obj.onmouseout=function (ev) {
      tip.style.visibility="hidden";
  };
  obj.onmousemove=function(ev) { //если не нужно что бы подскасзка бегала, то onmouseover
      tip.style.visibility="visible";
      if(window.event) ev=window.event;
      tip.style.left=ev.clientX + document.body.scrollLeft + ToolTip.offsetX;
      tip.style.top=ev.clientY + document.body.scrollTop + ToolTip.offsetY;
  };
}
//переберем заданные элементы, дадим подказку тем у кого есть аттрибут tooltip
//В аргументах передаем имена рассматриваемых тегов, * все теги
function initToolTips() {
//   return;
    var tags, tooltext;
    for(var i=0; i<arguments.length; i++) {
       tags=document.body.getElementsByTagName(arguments[i]);
       for(var j=0; j<tags.length; j++)
            if((tooltext=tags[j].getAttribute("tooltip"))) ToolTip(tags[j], tooltext);
   }
}


Но есть несколько проблем.
1. Если разрешение монитора очень маленькое, то подсказка уезжает вправо и получается, что страница разъезжается.
2. Если делать по X, Y то то же самое, приходится ставить после слов <br>, как можно сделать ее фиксированной что ли или еще что-нибудь придумать?

Спасибо.

Автор: LSD 26.1.2006, 11:52
Модератор: перемещено из Java

Автор: Jax 27.1.2006, 15:09
Скажите хотя бы как сделать фиксированный размер окошка или в крайнем случае сделать ее слева от мышки, а не справа, но опять же - фиксированно.

Автор: Ciber SLasH 27.1.2006, 15:21
Попробуй:
Код

<body style='overflow: hidden'>

Автор: Jax 27.1.2006, 17:58
Нет, не то.
Разве нельзя сделать фиксированный размер окошка в пикселях? %)

Автор: Innuendo 27.1.2006, 19:49
сделай
в диве напиши style="width:50px; height: 100px"

Автор: Gravip 27.1.2006, 20:02
Jax

Можешь дать пример , как подключить этот скрипт к элементу в html smile smile

Автор: Ciber SLasH 27.1.2006, 21:21
Цитата(Gravip @ 27.1.2006, 20:02 Найти цитируемый пост)

как подключить этот скрипт к элементу в html

Я тоже честно говоря не въехал как его прикрутить. Соответственно и ответов нет, т.к. нет примера использования...

Автор: Gravip 27.1.2006, 21:35
Я немного понял smile Но наблюдаю глюк у FF, его отладчик ругается на вычисление top и left smile может что ещё надо ?

Код

<html>
<script type="text/javascript" src="ToolTip.js"></script>
<body onload="initToolTips('SPAN','IMG')">
<span tooltip="Текст тултипа">Текст</span>
</body> </html>


Код

.tool_tip {
position: absolute;
visibility: hidden;
/* styles */
background-color: #f7f6f6;
font-family: verdana;
color: #444444;
font-size: 10px;
border: 1px solid #97A2B0;
padding: 1px;
text-align: left;
}

Автор: Innuendo 27.1.2006, 22:53
Цитата

Можешь дать пример , как подключить этот скрипт к элементу в html

Данный пример из FAQ этого форума. Скрипт Sardara... Я тестил.. просто вставляешь в ХТМЛ и всё smile

Автор: Ciber SLasH 27.1.2006, 23:42
Вот что-то типа этого:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<script type='text/javascript'>
ToolTip.offsetX=20; //смещения подсказки от курсора
ToolTip.offsetY=10; //
function ToolTip(obj, text) {
  if(!obj||obj.nodeType!=1) throw "Illigal argument exception"; //обьект к кому привязываем подсказку
  //-- Разметка подсказки ---
  var tip=document.createElement("DIV");
  tip.className="tool_tip";
  tip.innerHTML=text;
  document.body.appendChild(tip);
  //-- события --
  obj.onmouseout=function (ev) {
      tip.style.visibility="hidden";
  };
  obj.onmousemove=function(ev) { //если не нужно что бы подскасзка бегала, то onmouseover
      tip.style.visibility="visible";
      if(window.event) ev=window.event;
      if ((ev.clientX + tip.clientWidth + ToolTip.offsetX + document.body.scrollLeft) > document.body.clientWidth) {
        tip.style.left = ev.clientX - (tip.clientWidth - (document.body.clientWidth - ev.clientX)) + document.body.scrollLeft;
      } else {
        tip.style.left=ev.clientX + document.documentElement.scrollLeft + ToolTip.offsetX;
      }
      if ((ev.clientY + tip.clientHeight + ToolTip.offsetY + document.documentElement.scrollTop) > document.documentElement.clientHeight) {
        tip.style.top = ev.clientY - (tip.clientHeight - (document.documentElement.clientHeight - ev.clientY)) + document.documentElement.scrollTop - 5;
      } else {
          tip.style.top=ev.y + document.documentElement.scrollTop + ToolTip.offsetY;
      }
  };
}
//переберем заданные элементы, дадим подказку тем у кого есть аттрибут tooltip
//В аргументах передаем имена рассматриваемых тегов, * все теги
function initToolTips() {
//   return;
    var tags, tooltext;
    for(var i=0; i<arguments.length; i++) {
       tags=document.body.getElementsByTagName(arguments[i]);
       for(var j=0; j<tags.length; j++)
            if((tooltext=tags[j].getAttribute("tooltip"))) ToolTip(tags[j], tooltext);
   }
}
</script>
<style type='text/css'>
.tool_tip {
position: absolute;
visibility: hidden;
/* styles */
background-color: #f7f6f6;
font-family: verdana;
color: #444444;
font-size: 10px;
border: 1px solid #97A2B0;
padding: 1px;
text-align: left;
}
</style>
</head>

<body onload="initToolTips('SPAN','IMG')">
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<pre>    <span tooltip="Текст тултипа">Текст</span></pre>
</body>
</html>

Короче тебе нужно "тултип" отодвигать от краёв экрана (если он вылазит за него) на величину b от правого края и на величину d от нижнего края, если он вылазит за края. Для лучшейго понимания смотри рисунок:
user posted image
Расчитывается примерно так, но в разных браузерах clientWidth/clientHeight взаимоисключаемы с offsetWidth/offsetHeight, т.ч. с кроссбраузерностью будут проблемы.
b = tip.clientWidth - (document.body.clientWidth - ev.clientX);
d = tip.clientHeight - (document.documentElement.clientHeight - ev.clientY)

ЗЫ: но в общем Innuendo прав — бери скрипт Sardar-a.

Автор: Jax 28.1.2006, 12:19
Цитата(Ciber SLasH @ 27.1.2006, 23:42 Найти цитируемый пост)

ЗЫ: но в общем Innuendo прав — бери скрипт Sardar-a.

Ты это имеешь ввиду: http://vingrad.ru/JAVASCRIPT-FAQ-002034 ?


Автор: Ciber SLasH 28.1.2006, 14:26
Цитата(Jax @ 28.1.2006, 12:19 Найти цитируемый пост)
Ты это имеешь ввиду: http://vingrad.ru/JAVASCRIPT-FAQ-002034 ?

Нет, я имею ввиду: http://forum.vingrad.ru/index.php?showtopic=53318

Автор: Innuendo 28.1.2006, 18:07
Ciber SLasH
так у него именно этот скрипт и есть smile

Автор: Ciber SLasH 29.1.2006, 00:23
Цитата(Innuendo @ 28.1.2006, 18:07 Найти цитируемый пост)
так у него именно этот скрипт и есть smile

Точно, а я и не заметил. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)