Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Всплывающая подсказка (https://javascript.ru/forum/dom-window/1244-vsplyvayushhaya-podskazka.html)

SunYang 24.05.2008 22:10

Всплывающая подсказка
 
Как я вижу (пока в голове у себя, а не на сайте к сожалению) работу этого скрипта:
При наведении мыши на картинку, табличка, которая изначально невидима, становится видимой, позиционируется рядом с курсором мыши и в ячейку этой таблицы вписывается текст с задержкой для каждой буквы. По событию onmouseout() текст в ячейке очищается. НО!!! При новом наведении мыши, текст в ячейку не записывается, и табличка оказывается пустой. Помогите пожалуйста отладить скрипт...

<script>
wrstr = "Описание канала"
astr = wrstr.split("")
typestr = ""
i=0;
function wrtext() {
if(i< astr.length) {
typestr+=astr[i];
document.getElementById("wr_"+num_id).innerHTML = typestr;
i++;
}
else clearInterval(xinterval)
}
/* xinterval = setInterval("wrtext()", 50) */

function on_panel() {
on_id = event.srcElement
num_id = on_id.id;
lem=document.getElementById("u_"+num_id);
if(lem.style.visibility=="hidden") {
coord=window.event;
lem.style.top=coord.clientY+20;
lem.style.left=coord.clientX+20;
lem.style.visibility="visible";
     xinterval = setInterval("wrtext()", 50)
	 
}

else {
lem.style.visibility="hidden";
	document.getElementById("wr_"+num_id).innerHTML = ""; 
}
}

</script>
<body>
<img id="01" src="bodyimg/hotbird1.gif" width="95" height="72" onMouseOver="on_panel()" onMouseOut="on_panel()">
<div id="u_01" style="background-color:#FF9900; border:#0000CC; border-style:solid; border-width:1px; visibility:hidden; position:absolute; width:200;top:50; left:50; height:200; opacity:0.5; filter:alpha(opacity:50);">
<table width="200">
  <tr>
    <td id="wr_01"></td>
  </tr>
</table>
</div>
</body>


Спасибо

Андрей Параничев 24.05.2008 22:56

SunYang,
Перед установкой нового интервала xinterval = setInterval("wrtext()", 50), у вас не обнуляется счетчик символов. Попробуйте сделать так:
...
i = 0;
xinterval = setInterval("wrtext()", 50);
...

SunYang 24.05.2008 23:31

Попробовал. Частично работает. Начинает писать строку заново. Но уже после уже написанной при первом наведении мыши. Одну и туже строку пишет еще раз после каждого наведения.

SunYang 24.05.2008 23:32

чет на код по событию onmouseout()
...
document.getElementById("wr_"+num_id).innerHTML = "";
...
не реагирует.

Андрей Параничев 24.05.2008 23:42

SunYang,
Попробуйте так:
function on_panel() {
     if(lem.style.visibility=="hidden") {
          on_id = event.srcElement
          num_id = on_id.id;
          lem=document.getElementById("u_"+num_id);
          coord=window.event;
          lem.style.top=coord.clientY+20;
          lem.style.left=coord.clientX+20;
          lem.style.visibility="visible";
          xinterval = setInterval("wrtext()", 50)
     } else {
          lem.style.visibility="hidden";
          lem.innerHTML = "";
          i = 0; 
     }
}

SunYang 25.05.2008 02:51

Все!!! Я сам додумал....
Вот так надо было написать:

function on_panel() {

typestr=""      // Все дело в том, что строка эта после отработки функции бла не пуста.

on_id = event.srcElement
num_id = on_id.id;
lem=document.getElementById("u_"+num_id);
if(lem.style.visibility=="hidden") {
coord=window.event;
lem.style.top=coord.clientY+20;
lem.style.left=coord.clientX+20;
lem.style.visibility="visible";
xinterval = setInterval("wrtext()", 50)
 
}
 
else {
lem.style.visibility="hidden";
i=0
}
}

SunYang 25.05.2008 02:52

Спасибо за поддержку!!

SunYang 25.05.2008 12:03

А кто знает, можно зашифровать этот скрипт??

Snipe 02.06.2008 17:08

можно его откомпресить:
http://javascript.ru/optimize/javascript-compression

В данном случае подойдет компрессия через eval(str);
Не шифровка, но читать уже сложнее. =)))

SunYang 02.06.2008 23:23

Дык этож все дешифрации подлежит....


Часовой пояс GMT +3, время: 23:22.