Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tooltips script
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Vir
Witam,

napisałem skrypt podpowiedzi w formie dymków/chmurek.
Problem jest taki, że w IE, w przypadku gdy strona jest na tyle długa, że na ekranie pojawia się scroll, jeżeli najedziemy na link podpowiedzi, wówczas na ułamek sekundy scroll "skacze" na sam dół i powraca. W innych skryptach (dostępnych w sieci) tak się nie dzieje, próbowałem prawie wszystkich możliwości i nic... Dalej to samo.
Po raz pierwszy wymiękłem i nic mi już do głowy nie przychodzi, stąd proszę Was o pomoc w zdiagnozowaniu problemu smile.gif
Poniżej skrypt z dużą ilością znaczników <br />, tak aby pojawił się scroll i żebyście mogli zauważyć opisany wyżej, niechciany efekt.

  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  2. <style type="text/css">
  3.  
  4. body
  5. {
  6. text-align:center;
  7. }
  8.  
  9. .tooltip
  10. {
  11. border-width:1px;
  12. border-style:dashed;
  13. border-color:#696969;
  14. position:absolute;
  15. margin-top:25px;
  16. background:#E5E5E5;
  17. color:#000000;
  18. padding:2px;
  19. }
  20.  
  21. <script type="text/javascript">
  22.  
  23. /***********************************************************************
  24. Tooltips script v.1.0
  25.  
  26. Copyrights (c) 2005 Mariusz 'Vir' Grabczynski
  27.  
  28. free for non-commercial use
  29.  
  30. [please leave this comment intact]
  31.  
  32.  
  33.  
  34. Parametrs (in 'title' attributes):
  35.  
  36. | - new line [should be placed directly after words - whithout space]
  37.  
  38. ***********************************************************************/
  39.  
  40. onload=function(d,b,a,nD,nDe,tV,e)
  41. {
  42. d=document;b=d.body;a=b.getElementsByTagName('a');
  43. for(i=0;i<a.length;i++)
  44. {
  45. if(a[i].title)
  46. {
  47. a[i].onmouseover=function()
  48. {
  49. nD=d.createElement('div');nD.className='tooltip';nD.id='tooltip';
  50. b.appendChild(nD);tV=this.title;
  51. nD.innerHTML=this.title.replace(/\|/g,"<br />");
  52. this.title='';
  53. }
  54. a[i].onmousemove=function()
  55. {
  56. if(nDe=d.getElementById('tooltip'))
  57. {
  58. e=e||event;
  59. with(nDe.style){left=e.clientX+b.scrollLeft+'px';top=e.clientY+b.scrollTop+'px';}
  60. }
  61. }
  62. a[i].onmouseout=function()
  63. {
  64. if(nDe=d.getElementById('tooltip'))b.removeChild(nDe);
  65. this.title=tV;
  66. }
  67. }
  68. }
  69. }
  70.  
  71. </head>
  72. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  73. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  74. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  75. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  76. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  77. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  78. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  79. <a href="#" title="Testowy opis| 123, abc.">Przykład</a>
  80. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  81. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  82. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  83. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  84. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  85. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  86. </body>
  87. </html>
nospor
daj w href w onclick na koncu return false. Mi to zawsze pomagało
<a href="#" onclick="return false;" ....
Vir
Dzięki za odzew, ale nie o to chodzi.
Skopiuj kod, zapisz jako plik html, jeszcze raz przeczytaj tekst, a zobaczysz w czym problem (przy IE) winksmiley.jpg

Pozdrawiam
nospor
No już wiem o co Ci chodzi winksmiley.jpg
W operze jest podobnie, ale mniej to widać.
I nie mam pojęcia o co chodzi. sad.gif
bendi
Klasa tooltip ustawia pozycje warstwy na absolute, ale nie nadaje jej zadnych wlasnosci ekranowych, wiec pojawia sie ona na samym dole dokumentu dopoki ktos nie poruszy myszka i nie nada mu jakis wlasnosci przekazanych z kursora. Dopiero wtedy przechodzi on gdzie trzeba.

Tutaj masz skrypt Elusia , ktory tez dynamicznie dodaje zdarzenia i wtedy jest mozliwe przekazanie obiektu event w Gecko.

Ja niestety ustawiam zdarzenie za pomoca atrybutu i to kod wywolujacy juz jest wiec nie mam tego komfortu przekazywania event'ow jako parametr funkcji dlatego rozwiazalem to nieco inaczej - pokazuje warstw'e toolTipa dopiero wtedy gdy ktos poruszy myszka nad obiektem ktory wywoluje toolTip'a. Uznalem ze z dwojga zlego to jest nieco lepsze rozwiazanie.

Powodzenia.
Vir
Dzisiaj rano doznałem olśnienia i doszedłem do rozwiązania, które zamieszczam poniżej. Jak widać wystarczyła mała modyfikacja smile.gif

Kod
/*

Tooltips script v.1.0

Copyrights (c) 2005 Mariusz 'Vir' Grabczynski

free for non-commercial use

[please leave this comment intact]



Parametrs (in 'title' attributes):

| - new line [should be placed directly after words - whithout space]

*/

onload=function(d,b,a,i,nD,nDe,tV)
{
  d=document;b=d.body;a=b.getElementsByTagName('a');
  for(i=0;i<a.length;i++)
  {
  if(a[i].title)
  {
   nD=d.createElement('div');nD.className='tooltip';nD.id='tooltip';b.appendChild(nD);
   a[i].onmouseover=function()
   {
    b.appendChild(nD);tV=this.title;nD.innerHTML=this.title.replace(/\|/g,"<br />");
    this.title='';
   }
   a[i].onmousemove=function(e)
   {
    if(nDe=d.getElementById('tooltip'))
     {
      e=e||event;
      with(nDe.style){left=e.clientX+b.scrollLeft+'px';top=e.clientY+b.scrollTop+'px';}
     }
   }
   a[i].onmouseout=function()
   {
    t=d.getElementById('tooltip');if(nDe=t)b.removeChild(nDe);this.title=tV;
   }
   a[i].onclick=function()
   {
    return false;
   }
  }
}
}


Ps. Jeżeli mamy ustawiony background-color w a:hover (css), wówczas problem pojawi się na nowo - rozwiązanie to usunięcie tego stylu.

Pzdr
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.