Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Animacja
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
ArniPL
Witam,
Próbuję zrobić za pomocą biblioteki jQuery płynnie zmieniający się kolor tła po najechaniu myszką na diva.
Jedynym rozwiązaniem jakie przyszło mi do głowy jest:
Kod
$(function(){
    $("#Form").mouseover(function(){$("#Form").animate({backgroundColor: "black"}, 1000);});
});

Ale to nie działa. Działa natomiast zmiana natychmistowa (bez płynnego przejścia) poprzez:
Kod
$(function(){
    $("#Form").mouseover(function(){$("#Form").css({backgroundColor: "black"});});
});

Funkcja animate napewno działa dobrze bo kod:
Kod
$(function(){
    $("#Form").mouseover(function(){$("#Form").animate({opacity: 0}, 1000);});
});

Powoduje zamierzony efekt czyli płynne zanikanie. To samo z backgroundColor już nie działa.
Ktoś wie jak rozwiązać ten problem?
abc667
zapewne jQuery nie ma zaimplementowanej tej funkcji, a to nie jest takie proste jak z opacity, tutaj przedstawiam ci przykładowe rozwiązanie bez jquery

(testowane na ff, oczywiście to tylko demonstracja, do funkcjonalności pełnej jeszcze dużo by trzeba dopisać)

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <title>...</title>
  3. <script type="text/javascript">
  4.  
  5. function $(id) {
  6. return document.getElementById(id);
  7. }
  8.  
  9. function changeColor(from, to, delay, numberOfSteps, obj)
  10. {
  11.  
  12. from = toDec(from);
  13. to = toDec(to);
  14. step = new Array();
  15. step[0] = Math.floor((to[0] - from[0])/numberOfSteps);
  16. step[1] = Math.floor((to[1] - from[1])/numberOfSteps);
  17. step[2] = Math.floor((to[2] - from[2])/numberOfSteps);
  18.  
  19. changeColor2(from, to, step, delay, obj);
  20.  
  21. }
  22.  
  23. function changeColor2(now, to, step, delay, obj)
  24. {
  25. if(now[0] < to[0] && now[1] < to[1] && now[2] < to[2])
  26. {
  27. obj.style.backgroundColor = toHex(now[0]+step[0], now[1]+step[1], now[2]+step[2]);
  28. nowTmp = new Array(now[0] + step[0], now[1] + step[1], now[2] + step[2]);
  29. setTimeout(function() { changeColor2(nowTmp, to, step, delay, obj) }, delay);
  30. }
  31. }
  32.  
  33. function toDec(str)
  34. {
  35.  
  36. tmp = new Array(parseInt(str.slice(1,3),16), parseInt(str.slice(3,5),16), parseInt(str.slice(5,7), 16));
  37. return tmp;
  38. }
  39.  
  40. function toHex(red, green, blue)
  41. {
  42. var red = red.toString(16)
  43. var green = green.toString(16);
  44. var blue = blue.toString(16)
  45. if(red.length == 1) red = "0"+red;
  46. if(green.length == 1) green = "0"+green;
  47. if(blue.length == 1) blue = "0"+blue;
  48. return "#" + red + green + blue + "";
  49. }
  50.  
  51. </head>
  52.  
  53. <div onclick="changeColor('#000000', '#ffffff', 50, 50, this);" style="width: 500px; height: 300px; background-color: black;"> </div>
  54.  
  55. </body>
  56. </html>
ArniPL
Dzięki za te rozwiązanie ale mógłbym to zrobić również za pomocą biblioteki mootools. Z jQuery próbowałem tylko z ciekawości. Z tego co widzę to w zakresie efektów mootools ma znacznie większe możliwości. smile.gif
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.