Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Wariujaca animacja
Forum PHP.pl > Forum > Przedszkole
Maciek316
Witam mam problem z animacja w moim skrypcie.
Wszystko jest okej dopóki nie zmienie karty w przeglądarce, wtedy gdy wróce to animacja robi co chce, przyspiesza, myli 2 efekty itp.


  1. $('.cios, #textDiv1').fadeIn()
  2. $('#textDiv1').animate({top: '-50px'},600);
  3. div1.innerHTML = -obrazenia[id];
  4. $('#textDiv1, .cios').fadeOut(1000)
  5. $('#textDiv1').animate({top: '0px'});


.cios i #textdiv1 odpowiadaja za wyswietlanie obrazka i obrazeń.

Okno odswiezam co 1,5 sekundy:

  1. var t=setTimeout('walcz()',1500);


Moge pokazać caly kod, jesli to pomoze :/
Comandeer
To jest problem związany z samym sposobem działania przeglądarki. Jeśli karta jest nieaktywna, to żadne zmiany w DOM nie są wprowadzane, bo nie ma takiej potrzeby. Stąd, gdy wrócisz na tę kartę, trzeba wprowadzić wiele zmian równocześnie. Prawdopodobnie przepisanie kodu na requestAnimationFrame by pomogło
Maciek316
No ale to jest dziwne, bo wyzej wymioniona animacja wariuje, a ta:
  1. $('#przeciwnik').animate({
  2. top: '+='+wartosci[id],
  3. width: '-='+wartosci[id],
  4. }, 700, function() {}
  5. );

juz tego problemu nie ma.
Comandeer
A ta animacja też jest odpalana cyklicznie?
Maciek316
tak, to jest w jednym if'ie
  1. if(kto[id] == 1){
  2. $('#przeciwnik').animate({
  3. top: '+='+wartosci[id],
  4. width: '-='+wartosci[id],
  5. }, 700, function() {}
  6. );
  7. $('.cios, #textDiv1').fadeIn()
  8. $('#textDiv1').animate({top: '-50px'},600);
  9. div1.innerHTML = -obrazenia[id];
  10. $('#textDiv1, .cios').fadeOut(1000)
  11. $('#textDiv1').animate({top: '0px'});
  12.  
  13. }
Comandeer
Hm… mój strzał byłby taki, że obliczenia zmian rozmiaru można zsumować i na koniec po prostu wprowadzić jedną zmianę. A pokazywanie i ukrywanie trzeba jednak wykonać tyle razy, ile zostało zaplanowane.

Można próbować w taki sposób coś z tym robić: http://stackoverflow.com/questions/1652986...-on-window-blur
Maciek316
no ale jak to sprawdzić, jaki dać warunek? ohmy.gif
Problem jest w animacji obrazen, bo cala reszta sie zgadza.
Comandeer
Jak strona jest nieaktywna, to nie wywołuj setTimeout i usuń obecną kolejkę animacji przy pomocy clearTimeout. Jak wykryć, że strona jest nieaktywna: http://stackoverflow.com/questions/1060008...rrently-active/
Maciek316
tam jest pokazany caly kod, ale jak ja mam z tego stworzyc warunek, pod ktora zmienna jest to stworzone?

Pomoże ktoś? :/
Comandeer
Ale z czym dokładnie masz problem?
Maciek316
ze stworzeniem warunku, ogolnie js sie dopiero ucze sad.gif

Dajmy na to pierwszą sytuacje:
  1. (function($) {
  2. if (!$.winFocus) {
  3. $.extend({
  4. winFocus: function() {
  5. var init = true, methods = [];
  6. if (!$(document).data('winFocus')) $(document).data('winFocus', $.winFocus.init());
  7. for (x in arguments) {
  8. if (typeof arguments[x] == 'object') {
  9. if (arguments[x]['blur']) $.winFocus.methods.blur.push(arguments[x].blur);
  10. if (arguments[x]['focus']) $.winFocus.methods.focus.push(arguments[x].focus);
  11. if (arguments[x]['blurFocus']) $.winFocus.methods.blurFocus.push(arguments[x].blurFocus);
  12. if (arguments[x]['initRun']) init = arguments[x].initRun;
  13. }
  14. else if (typeof arguments[x] == 'function') methods.push(arguments[x]);
  15. else if (typeof arguments[x] == 'boolean') {
  16. init = arguments[x];
  17. }
  18. }
  19. if (methods) {
  20. if (methods.length == 1) $.winFocus.methods.blurFocus.push(methods[0]);
  21. else {
  22. $.winFocus.methods.blur.push(methods[0]);
  23. $.winFocus.methods.focus.push(methods[1]);
  24. }
  25. }
  26.  
  27. if (init) $.winFocus.methods.onChange();
  28. }
  29. });
  30. $.winFocus.init = function() {
  31. // var document.hidden || document.msHidden || document.webkitHidden || document.mozHidden;
  32.  
  33. // Standards:
  34. if ($.winFocus.props.hidden in document) // IE10 | FF20+
  35. document.addEventListener('visibilitychange', $.winFocus.methods.onChange);
  36. else if (($.winFocus.props.hidden = 'mozHidden') in document) // Older FF Versions (?)
  37. document.addEventListener('mozvisibilitychange', $.winFocus.methods.onChange);
  38. else if (($.winFocus.props.hidden = 'webkitHidden') in document) // Chrome
  39. document.addEventListener('webkitvisibilitychange', $.winFocus.methods.onChange);
  40. else if (($.winFocus.props.hidden = 'msHidden') in document) // IE 4-6
  41. document.addEventListener('msvisibilitychange', $.winFocus.methods.onChange);
  42. else if (($.winFocus.props.hidden = 'onfocusin') in document) // IE7-9
  43. document.onfocusin = document.onfocusout = $.winFocus.methods.onChange;
  44. else // All others:
  45. window.onpageshow = window.onpagehide = window.onfocus = window.onblur = $.winFocus.methods.onChange;
  46.  
  47. return $.winFocus;
  48. }
  49. $.winFocus.methods = {
  50. blurFocus: [], blur: [], focus: [],
  51. exeCB: function(e) {
  52. if ($.winFocus.methods.blurFocus) $.each($.winFocus.methods.blurFocus, function(k, v) { this.apply($.winFocus, [e, !e.hidden]) });
  53. else if (e.hidden) if ($.winFocus.methods.blur) $.each($.winFocus.methods.blur, function(k, v) { this.apply($.winFocus, [e]) });
  54. else if ($.winFocus.methods.focus) $.each($.winFocus.methods.focus, function(k, v) { this.apply($.winFocus, [e]) });
  55. },
  56. onChange: function(e) {
  57. var eMap = { focus: false, focusin: false, pageshow: false, blur: true, focusout: true, pagehide: true };
  58. e = e || window.event;
  59.  
  60. if (e) {
  61. e.hidden = e.type in eMap ? eMap[e.type] : document[$.winFocus.props.hidden];
  62. $(window).data('visible', !e.hidden);
  63. $.winFocus.methods.exeCB(e);
  64. }
  65. else {
  66. try { $.winFocus.methods.onChange.call(document, new Event('visibilitychange')); }
  67. catch(err) { }
  68. }
  69. }
  70. }
  71. $.winFocus.props = { hidden: 'hidden' }
  72. }
  73. })(jQuery);


i daje warunek:
  1. $.winFocus(function(event, isVisible) {
  2. if(isVisible){
  3. var t=setTimeout('walcz()',1500);
  4. }else
  5. clearTimeout(t);
  6.  
  7. });

I wtedy po zmienieniu karty tak jakby sie zamraza, ale potem animacja wariuje, pokazuje po 2 naraza, przyspiesza :/
Comandeer
Raczej coś tego typu:
Kod
var t;
$.winFocus(function(event, isVisible) {
if(isVisible){
    t=setTimeout('walcz()',1500);
}else
    clearTimeout(t);

});

W innym wypadku clearTimeout nie ma czego usuwać, bo nie widzi t
Maciek316
teraz, gdy zmieniam karte to zatrzymuje, ale animacja mi sie posypala, pokazuje obie naraz i przyspieszają :/
Comandeer
http://jsfiddle.net/Comandeer/u4kp1ycd/
Maciek316
przerobilem to na swoj kod, ale u mnie dziala na odwrot ohmy.gif jak zmienie podstrone to sa animacje, ale jak na niej jestem to sie zamraza... juz nie mam do tego sily tongue.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.