Показать сообщение отдельно
  #1 (permalink)  
Старый 24.12.2016, 19:54
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

Request Animation Frame кэшируется или фича?
В общем вот такой код:

var tr = ['test','test1','test2','test3'];
		var t  = 5000;
		var s = performance.now();

		for(var i in tr) {

			requestAnimationFrame(
				function frame(d) {

					// g - time gone
					var g = d - s;

					// time escape preventing
					if (g > t) { 
						g = t;
					}

					console.log(tr[i])


					// animation time is over? if not next frame
					if (g < t) {
						requestAnimationFrame(frame);
					} 
				}
			);

		}


Расконсоливание выводит одну и ту же переменную из массива.
Что это следствие кэширования, где-то моя тупость из-за усталости или фича.

Обойти можно вот так:

var tr = ['test','test1','test2','test3'];
		var t  = 5000;
		var s = performance.now();

		for(var i in tr) {

			(function animloop(x) {
				requestAnimationFrame(
					function frame(d) {

						// g - time gone
						var g = d - s;

						// time escape preventing
						if (g > t) { 
							g = t;
						}

						console.log(x)


						// animation time is over? if not next frame
						if (g < t) {
							requestAnimationFrame(frame);
						} 
					}
				);
			})(tr[i]);
		}


тоесть оборачиванием в iife мы устраняем эффект "кэширования" функции.

Это что? Фича такая или я уже замылился и что-то натупил?
Ответить с цитированием