Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Tooltips script
Vir
post
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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>


Ten post edytował Vir 27.04.2005, 09:27:19
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




daj w href w onclick na koncu return false. Mi to zawsze pomagało
<a href="#" onclick="return false;" ....
Go to the top of the page
+Quote Post
Vir
post
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


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) (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No już wiem o co Ci chodzi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
W operze jest podobnie, ale mniej to widać.
I nie mam pojęcia o co chodzi. (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
bendi
post
Post #5





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Vir
post
Post #6





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


Dzisiaj rano doznałem olśnienia i doszedłem do rozwiązania, które zamieszczam poniżej. Jak widać wystarczyła mała modyfikacja (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 04:26