Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] problem z podświetlaniem linków.
Forum PHP.pl > Forum > Przedszkole
The Night Shadow
W pliku hi.js znajduje się taki skrypt:

  1. // <config>
  2.  
  3. startColor = "#FFFFFF";      // initial link color
  4. endColor = "#CC0000";              // final link color
  5.  
  6. stepIn = 20;                        // delay when fading in
  7. stepOut = 40;                        // delay when fading out
  8.  
  9. autoFade = true;                  //set to true or false; true will cause all links to fade automatically
  10.  
  11. // </config>
  12.  
  13. hexa = new makearray(16);
  14. for(var i = 0; i < 10; i++)
  15.    hexa[i] = i;
  16. hexa[10]="a"; hexa[11]="b"; hexa[12]="c";
  17. hexa[13]="d"; hexa[14]="e"; hexa[15]="f";
  18.  
  19. linki=document.getElementsByTagName("a");
  20. oldonmouseover = new makearray(linki.length);
  21. oldonmouseout = new makearray(linki.length);
  22. function init() {
  23. if (!document.getElementsByTagName || !autoFade) return;
  24. for (var i=0; i <linki.length; i++) {
  25.      oldonmouseover[i]=linki[i].onmouseover;
  26.      oldonmouseout[i]=linki[i].onmouseout;
  27.      linki[i].onmouseover=domouseover(i);
  28.      linki[i].onmouseout=domouseout(i);
  29.      if (!linki[i].id) linki[i].id="fade_id"+(i+1);
  30.      }
  31. }
  32. startColor = dehexize(startColor.toLowerCase());
  33. endColor = dehexize(endColor.toLowerCase());
  34.  
  35. var fadeId = new Array();
  36.  
  37. function dehexize(Color){
  38.      var colorArr = new makearray(3);
  39.      for (i=1; i<7; i++){
  40.            for (j=0; j<16; j++){
  41.                  if (Color.charAt(i) == hexa[j]){
  42.                        if (i%2 !=0)
  43.                              colorArr[Math.floor((i-1)/2)]=eval(j)*16;
  44.                        else
  45.                              colorArr[Math.floor((i-1)/2)]+=eval(j);
  46.                  }
  47.            }
  48.      }
  49.      return colorArr;
  50. }
  51.  
  52. function domouseover(i) {
  53.      var i;
  54.      if (oldonmouseover[i]) {return new Function ("oldonmouseover["+i+"](); fade(startColor,endColor,this.id,stepIn);");}
  55.      else {return new Function ("fade(startColor,endColor,this.id,stepIn);");}
  56.      }
  57.  
  58. function domouseout(i) {
  59.      var i;
  60.      if (oldonmouseout[i]) {return new Function ("oldonmouseout["+i+"](); fade(endColor,startColor,this.id,stepIn);");}
  61.      else {return new Function ("fade(endColor,startColor,this.id,stepIn);");}
  62.      }
  63.  
  64. function makearray(n) {
  65.    this.length = n;
  66.    for(var i = 1; i <= n; i++)
  67.        this[i] = 0;
  68.    return this;
  69. }
  70.  
  71. function hex(i) {
  72.    if (i < 0)
  73.        return "00";
  74.    else if (i > 255)
  75.        return "ff";
  76.    else
  77.       return "" + hexa[Math.floor(i/16)] + hexa[i%16];
  78. }
  79.  
  80. function setColor(r, g, b, element) {
  81.      var hr = hex(r); var hg = hex(g); var hb = hex(b);
  82.      element.style.color = "#"+hr+hg+hb;
  83. }
  84.  
  85. function fade(s,e,element,step){
  86.      var sr = s[0]; var sg = s[1]; var sb = s[2];
  87.      var er = e[0]; var eg = e[1]; var eb = e[2];
  88.      if (fadeId[0] != null && fade[0] != element){
  89.            setColor(sr,sg,sb,eval("document.getElementById(\""+fadeId[0]+"\")"));
  90.            var i = 1;
  91.            while(i < fadeId.length){
  92.                  clearTimeout(fadeId[i]);
  93.                  i++;
  94.                  }
  95.            }
  96.      for(var i = 0; i <= step; i++) {
  97.            fadeId[i+1] = setTimeout("setColor(Math.floor(" +sr+ " *(( " +step+ " - " +i+ " )/ " +step+ " ) + " +er+ " * (" +i+ "/" +
  98. step+ ")),Math.floor(" +sg+ " * (( " +step+ " - " +i+ " )/ " +step+ " ) + " +eg+ " * (" +i+ "/" +step+
  99. ")),Math.floor(" +sb+ " * ((" +step+ "-" +i+ ")/" +step+ ") + " +eb+ " * (" +i+ "/" +step+ ")),document.getElementById(\""+element+"\"));",i*step);
  100.      }
  101.      fadeId[0] = element;
  102. }
  103. window.onload=init;


Nie znam się na javiescript więc zwracam się do was z pytaniem. Dlaczego kiedy w pliku index.php odpowiednio pobrać powyższy plik wszystkie linki zmieniaą barwy tak jak powinny, a kiedy wstawić do tego pliku dodatkowo taki skrypt jak poniżej linki całkowicie przestają się podświetlać:

  1. <script language="JavaScript">
  2.  
  3. function MakeArrayday(size) {
  4.      this.length = size;
  5.      for(var i = 1; i <= size; i++) {
  6.      this[i] = "";
  7.      }
  8.  
  9. return this;
  10.            }
  11.  
  12. function MakeArraymonth(size) {
  13.      this.length = size;
  14.      for(var i = 1; i <= size; i++) {
  15.      this[i] = "";
  16.      }
  17.  
  18. return this;
  19.            }
  20.  
  21. function funClock() {
  22.  
  23. if (!document.layers && !document.all)
  24. return
  25.  
  26. var runTime = new Date();
  27. var hours = runTime.getHours();
  28. var minutes = runTime.getMinutes();
  29. var seconds = runTime.getSeconds();
  30. var year = runTime.getYear()+1900;
  31. var day = runTime.getDate();
  32. var week = runTime.getDay();
  33. var month = runTime.getMonth()+1;
  34. var day_text;
  35.  
  36.  if (week==0) {day_text="Niedziela"}
  37.  if (week==1) {day_text="Poniedziałek"}
  38.  if (week==2) {day_text="Wtorek"}
  39.  if (week==3) {day_text="Środa"}
  40.  if (week==4) {day_text="Czwartek"}
  41.  if (week==5) {day_text="Piątek"}
  42.  if (week==6) {day_text="Sobota"}
  43.  
  44.  
  45.  if (month==1) {month_text="stycznia"}
  46.  if (month==2) {month_text="lutego"}
  47.  if (month==3) {month_text="marca"}
  48.  if (month==4) {month_text="kwietnia"}
  49.  if (month==5) {month_text="maja"}
  50.  if (month==6) {month_text="czerwca"}
  51.  if (month==7) {month_text="lipca"}
  52.  if (month==8) {month_text="sierpnia"}
  53.  if (month==9) {month_text="września"}
  54.  if (month==10) {month_text="października"}
  55.  if (month==11) {month_text="listopada"}
  56.  if (month==12) {month_text="grudnia"}
  57.  
  58. if (hours > 24)
  59. {dn = "PM";
  60. hours = hours - 24;      }
  61.      
  62. if (hours == 0)
  63. hours = 24;
  64.            
  65. if (minutes <= 9)
  66. minutes = "0" + minutes;
  67.            
  68. if (seconds <= 9)
  69. seconds = "0" + seconds;
  70.  
  71. movingtime = "" + day_text + ", " + day + " " + month_text + " " + year + " roku godz.: " + hours + ":" + minutes + ":" + seconds + " ";
  72.  
  73. if (document.layers)
  74.  
  75.      {document.layers.go.document.write(movingtime);
  76.       document.layers.go.document.close();}
  77.  
  78. else if (document.all)
  79.      go.innerHTML = movingtime;
  80.                  
  81. setTimeout("funClock()",1000)
  82.      }
  83.  
  84. window.onload = funClock;


Tak jakby oba te skryty kłóciły się ze sobą...
LBO
problem tkwi w jednoczesnym wywołaniu metody window.onload, w takim przypadku zainicjalizowany zostanie skrypt zadeklarowany jako ostatni. Rozwiązanie? Wspólna funckja inicjalizacja() w ktorej uruchomisz init() (z hi.js) i funClock()
The Night Shadow
Czy zamiast tego można wstawić onload w sekcji body i tam wywoływać obydwie funkcje?
mike
Kod
window.onload = function() { funClock(); init(); }

... czy jakoś tak.
The Night Shadow
To nie działa...
mike
Cytat(The Night Shadow @ 2006-04-17 14:40:26)
To nie działa...

Jeszcze raz tak napiszesz i dostaniesz bana na tydzień + ostrzeżenie.

Kod
// deklarujesz funkcję funClock()

// deklarujesz funkcję init()

window.onload = function() { funClock(); init(); }
LBO
no to dawaj:
  1. <body onload="init();funClock()">...</body>

jeżeli nie zadziała to... hmmm, masz, może to gdzieś na sieci? chętnie obejrzałbym debuging w konsoli firefox'a smile.gif
The Night Shadow
Rzecz polega na tym, żę o ile wiem skrypty wykonywane są po kolei czyż nie?

Skrypt podświetlania linków znajduje się w sekcji head, a ten drugi z zegarem w sekcji body. To jest problem jeśli chodzi o wywoływanie funkcji w parametrze onload znacznika body, bo przecież kiedy skrypt jest tu wykonywany funkcja zegara jeszcze nie istnieje.

Jeżeli chodzi o sieć to owszem. Tylko nie wiem czy będzie Ci sie chciało, bo musiałbys się zarejestrować tutaj www.ogien.webd.pl (pierwsza bodaj wersja strony)

a tu www.ogien.webd.pl/blask/ znajduje się wersja z tymi dwoma skryptami razem.

Jeżeli chcesz się logowac, najlepiej na tej pierwszej stronie, druga jest w bidowie i jeszcze nie sprawdzałem, czy skrypty zakładania konta działają poprawnie.
LBO
hmmm, pousówałeś window.onload z tamtych skryptów?

a rozwiązanie ~mike_mech'a daj na końcu pliku - napisz czy zadziałało.

OT: o czym jest ta stronka?
The Night Shadow
Coś na wzór, bloga, galerii amatorskiej fotografii artystycznej, zbior spisanej filozofii itd.

Z tamtych skryptów pousuwałem, gdy wstawiałem w body. Rozwiązanie mikea też nic nie dało. W obu przypadkach oba skrypty na raz nie działały.
LBO
proszę, kod JS lekko odchudzony
Straszny masz smietnik w HTML, popraw to na przyszłośc... nie mówiąc, że to był jeden z najgorszych przypadków layout'u opartego na tabelkach jaki widziałem... smile.gif

cheers

P.S. daj info na riva, jak juz skumasz co i jak, wtedy usune stronkę... biggrin.gif
P.P.S. Podpowiem Ci, że dodałem clock.js i usunąłem kod funClock() z ciała dokumentu.
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.