Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Анимация. Возникла проблема с Анимацией в JS( (https://javascript.ru/forum/dom-window/36639-animaciya-voznikla-problema-s-animaciejj-v-js.html)

stanislav96 22.03.2013 20:10

Анимация. Возникла проблема с Анимацией в JS(
 
Вот, начал писать функцию для анимации..
var anim_ = {};
function anim(e){
  return {
	'go' : function(param, time, z){
	  if(e){
	    anim_[e] = true;
	    var tm = new Date().getTime();
	    setTimeout(function(){
		var pr = ((new Date().getTime()) - tm) / time;
		  z(e,pr);
		  if(pr < 1 && anim_[e]){
		    setTimeout(arguments.callee, 50);
		  };
	    }, 50);
	  };
	  return this;
	},
	'stop' : function(){
	  delete anim_[e];
	  return this;
	}
  };
};

Пример использования:
Код:

<div id="lo">text</div>
<script>
var pb = document.getElementById('lo');
pb.onmouseover = function(){
  anim(this).stop().go([12, 15], 500, function(e, l){
    e.style.fontSize = 15 - 12 * l + 12 +'px';
  });
};
pb.onmouseout = function(){
  anim(this).stop().go([15, 12], 500, function(e, l){
    e.style.fontSize = 12 - 15 * l + 15+'px';
  });
};
</script>

Проблема в том, чтобы сделать остановку анимации.. при отведении курсора, если элемент ещё не до конца "анимировался", чтобы он анимированно начал возвращаться в предыдущее состояние..

stanislav96 23.03.2013 00:33

UP

stanislav96 23.03.2013 18:40

up-up :(

danik.js 24.03.2013 22:18

че за z ?
Ты должен по таймеру анимировать все элементы, которые нужно в данный момент анимировать. Если все проанимировал - больше не запускаешь таймер до следующей анимации. И да, вместо setInterval нужно использовать requestAnimationFrame

stanislav96 30.03.2013 08:54

а можно пример?

danik.js 30.03.2013 09:39

var requestAnimationFrame = window.requestAnimationFrame ||
    window.mozRequestAnimationFrame ||  
    window.webkitRequestAnimationFrame ||
    window.msRequestAnimationFrame ||
    window.oRequestAnimationFrame ||
    function(callback) {
        setTimeout(callback, 1000/60);
    };


Часовой пояс GMT +3, время: 22:01.