Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.12.2016, 10:13
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

Анимация, рассчет скорости по времени и расстоянию
Безуспешно пытаюсь изменить пример с паровозиком отсюда http://plnkr.co/edit/QKkOvATRaCMQBXSbbCdN

В примере дано только время. В моем же условии дано расстояние и время за которое это расстояние должно быть пройдено. Скорость должна рассчитываться автоматически.

Никак не могу сообразить, даже в качестве примера показать нечего. Прошу помощи.
Ответить с цитированием
  #2 (permalink)  
Старый 25.12.2016, 10:38
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Дано расстояние и время. Никак не сообразить, что v = s / t?
http://plnkr.co/edit/kVKGHlArdxchoobvsU42?p=preview
Ответить с цитированием
  #3 (permalink)  
Старый 25.12.2016, 10:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

spo,
var timePassed = time - start;--- сделайте так чтоб эта величина изменялась только от 0 до 1, остальное проще. ответ тамже где вы взяли задачу, но попробуйте сами.
Ответить с цитированием
  #4 (permalink)  
Старый 25.12.2016, 10:49
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

Вроде справился
train.style.left = 0;

let currentPosition = parseInt(train.style.left, 10),
	distance = 500,
	movingTime = 4000;

train.onclick = function() {
	animate(function(timePassed) {
		train.style.left = timePassed * (distance / movingTime) + 'px';
		currentPosition = parseInt(train.style.left, 10);
	});
};

function animate(draw) {
	var start = performance.now();
	requestAnimationFrame(function animate(time) {

		var timePassed = time - start;

		// if (timePassed > duration) {
		// 	timePassed = duration;
		// }

		draw(timePassed);

		if (currentPosition < distance) {
			requestAnimationFrame(animate);
		}

	});
}

Не уверен насчет проверяющего условия, нужно ли там где то использовать время.
И еще закомментированный код из примера, не совсем понимаю зачем он нужен.
Ответить с цитированием
  #5 (permalink)  
Старый 25.12.2016, 10:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от spo
И еще закомментированный код из примера
страховка что параметры никогда не будут больше чем нужно. в вашем случае остановка может произойти при distance = 510 (условно)
Ответить с цитированием
  #6 (permalink)  
Старый 25.12.2016, 10:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

spo,
https://learn.javascript.ru/js-anima...нимации

смотрите в примере animate.js
Ответить с цитированием
  #7 (permalink)  
Старый 25.12.2016, 11:48
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

Посмотрите вот тут. Уже решал эту задачу. Вам нужно вычислить delta и применять ее каждый фрейм.

Анимировать N пикселей за T секунд


Для того, чтобы функция не нарисовала больше или меньше(она это сделает в любом случае). В условии

if (timePassed < duration) {
          requestAnimationFrame(animate);
        } else {
         element.style['propertie'] = destination-position.
        }


Нужно сделать вот такую вилку, которая по окончании всех действий просто жестко выставит положение в согласии с окончательным ожидаемым результатом. Это просто визуальный фикс для того чтобы исправить отклонения. Но иногда происходит рывок и этого пока как избежать я лично не придумал.
Ответить с цитированием
  #8 (permalink)  
Старый 26.12.2016, 05:35
Аватар для spo
spo spo вне форума
Профессор
Отправить личное сообщение для spo Посмотреть профиль Найти все сообщения от spo
 
Регистрация: 11.05.2011
Сообщений: 213

Большое всем спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
анимация в течении времени DynkanMaclaud Элементы интерфейса 2 28.04.2016 15:43
Анимация по времени savedmed jQuery 2 23.03.2016 17:13
Анимация по времени savedmed jQuery 0 23.03.2016 16:50