Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.01.2018, 00:17
Интересующийся
Отправить личное сообщение для IAmTrying Посмотреть профиль Найти все сообщения от IAmTrying
 
Регистрация: 22.12.2017
Сообщений: 15

Помогите пожалуйста, немогу понять этот пример
var cat = document.querySelector("img");
var angle = 0, lastTime = null;
function animate(time) {
if (lastTime != null)
angle += (time - lastTime) * 0.001;
lastTime = time;
cat.style.top = (Math.sin(angle) * 20) + "px";
cat.style.left = (Math.cos(angle) * 200) + "px";
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);


Объясните пожалуйста, как эта функция работает lastTime = null, а потом условие if (lastTime != null) как запускается тело после if? Зачем мы передаем в функцию переменную если потом не задаем здесь requestAnimationFrame(animate) ? Почему не объявить ее внутри?
angle += (time - lastTime) * 0.001 как это работает? Незаданная переменная time(которая просто объявлена), и lastTime = null, как оно переходит с null в какое-то значение, я вижу что идет присвоение lastTime = time; но переменной time не присваивается значение нигде, сложна сложна слооожна
Ответить с цитированием
  #2 (permalink)  
Старый 27.01.2018, 00:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,563

animate - это коллбэк, функция которая не вызывается прямо сейчас, а передаётся в качестве параметра в другую функцию(в данном случае requestAnimationFrame), коея уже в свою очередь внутри себя её вызывает с тем или иным набором параметров(в данном случае с параметром time, содержащим метку времени на момент вызова).

lastTime обявлена выше по скоупу(var angle = 0, lastTime = null;) потому доступна для изменения как внутри функции, так и снаружи. Значение null она имеет только первый раз, потом же происходит присовение текущей метки (lastTime = time;) и в последующих вызовах animate она имеет то значение, что и описывается её названием.

angle += (time - lastTime) * 0.001: угол равен время текущего вызова функции animate минус время предыдущего умножить на 0.001.
Фактически это значит, что независимо от частоты кадров угол изменится ровно на 0.001 за каждую прошедшую милисекнуду.
__________________
29375, 35

Последний раз редактировалось Aetae, 27.01.2018 в 00:52.
Ответить с цитированием
  #3 (permalink)  
Старый 27.01.2018, 13:52
Интересующийся
Отправить личное сообщение для IAmTrying Посмотреть профиль Найти все сообщения от IAmTrying
 
Регистрация: 22.12.2017
Сообщений: 15

Спасибо за ответ
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста я новичок! NemzevDanil Общие вопросы Javascript 3 02.02.2011 19:23
Помогите пожалуйста я новичок! NemzevDanil Элементы интерфейса 0 02.02.2011 00:00
помогите пожалуйста с задачей Маргарита1995 Общие вопросы Javascript 1 25.01.2011 23:09
Пожалуйста, помогите с созданием скрипта! Елизавета Общие вопросы Javascript 10 08.06.2010 13:20
Помогите, пожалуйста zashibis Общие вопросы Javascript 1 02.12.2008 14:07