Javascript.RU

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

Передача значения X в функцию Delta (JS Animation)
Взяв от сюда анимирующую функцию "стрельбы из лука"… столкнулся с проблемой передачи параметра "X", в вычисляющую функцию…
Могу сделать только в ручную назначенный "X", что уменьшает вариацию функции...

<html>
    <head>
<script>
//--------------------------- ANIMATION ----------------------------//
function animate(opts) {
  var el = opts.el || false;
  var start = new Date;
  var delta = opts.delta || linear;
  var from = opts.from || 0;
  var to =  opts.to || 0;
	if(el){ clearInterval(opts.el.timer);
    opts.el.timer = setInterval(function() {
    var progress = (new Date - start) / opts.duration;

    if (progress > 1) progress = 1;

    opts.step( delta(progress),from,to );

    if (progress == 1) {
      clearInterval(opts.el.timer);
      opts.complete && opts.complete();
    }
  }, opts.delay || 20);}
}

function back(progress, x) {
    //var x = 2.9;
    return Math.pow(progress, 2) * ((x + 1) * progress - x)
}

function makeEaseOut(delta) {
  return function(progress) {
    return 1 - delta(1 - progress)
  }
}
//--------------------------- ANIMATION ----------------------------//

</script>
    </head>
  <body>
	<div style="height:400px; background:#ccc;">
		<svg height="400" width="800" style="background:#fff;">
			<circle  id="white" cx="400" cy="200" r="1" fill="#66bad6" />
		</svg>
		<script>
				var div = document.getElementById("white");
				var roundM = Math.round(div.getAttribute('r'));
				setTimeout(function(){
					animate({
					    el : div,
						duration: 1400,
						delta: makeEaseOut(back),//как передать тут значение X?
						step: function(delta) {
							//анимированная смена радиуса
							div.setAttribute('r',delta*(90-(Math.round(roundM*100)/100))+(Math.round(roundM*100)/100));
						}
					});
				}, 100);

			setTimeout(function(){alert("roundM="+roundM);}, 1500); //вывод изначального значения, вместо текущего

		</script>
	</div>
    </body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2014, 14:10
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 07.02.2010
Сообщений: 23

Здравствуйте.
В объявлении функции укажите второй параметр:
function makeEaseOut(delta*!*, х*/!*) {

Затем в вызове передавайте х:
delta: makeEaseOut(back*!*, x*/!*)

Последний раз редактировалось XelaNimed, 15.10.2014 в 14:58.
Ответить с цитированием
  #3 (permalink)  
Старый 15.10.2014, 14:37
Аватар для max0n
Аспирант
Отправить личное сообщение для max0n Посмотреть профиль Найти все сообщения от max0n
 
Регистрация: 23.05.2012
Сообщений: 44

неработает
Ответить с цитированием
  #4 (permalink)  
Старый 15.10.2014, 14:48
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 07.02.2010
Сообщений: 23

Чудес на свете не бывает. Код в студию
Ответить с цитированием
  #5 (permalink)  
Старый 15.10.2014, 15:28
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Используйте именно для этого геморроя jquery и не мучайте свой мозг.
Ответить с цитированием
  #6 (permalink)  
Старый 15.10.2014, 15:40
Аватар для max0n
Аспирант
Отправить личное сообщение для max0n Посмотреть профиль Найти все сообщения от max0n
 
Регистрация: 23.05.2012
Сообщений: 44

Сообщение от kostyanet Посмотреть сообщение
Используйте именно для этого геморроя jquery и не мучайте свой мозг.
я не использую сторонние билиотеки…
по мне, так лучше познать азы оригинального языка.
Ответить с цитированием
  #7 (permalink)  
Старый 15.10.2014, 16:11
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от max0n
неработает
Забыл же пробросить в вызов функции back, передаваемой как аргумент delta в функцию makeEaseOut
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 15.10.2014, 16:47
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Сообщение от max0n
я не использую сторонние билиотеки…
Я же отметил особенность - именно для этого геморроя. Там нечего познавать. Анимация это смена кадров. Кадры можно или нарисовать, или сгенерировать по функции. Так вот вы там отрезали дюжину функций, а вообще их просто невероятно немеряно. И вы все собираетесь познать? Познавалка не отвалится?
Ответить с цитированием
  #9 (permalink)  
Старый 15.10.2014, 17:00
Аватар для max0n
Аспирант
Отправить личное сообщение для max0n Посмотреть профиль Найти все сообщения от max0n
 
Регистрация: 23.05.2012
Сообщений: 44

Сообщение от danik.js Посмотреть сообщение
Забыл же пробросить в вызов функции back, передаваемой как аргумент delta в функцию makeEaseOut
эм.. что? не понял….
Ответить с цитированием
  #10 (permalink)  
Старый 15.10.2014, 17:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от max0n
return 1 - delta(1 - progress)
Вот тут, свой X вторым параметром забыл пробросить, не видишь чели?
Нафиг ты в эти дебри лезешь если разобраться не можешь?
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача переменной с JS в PHP и обратно kamushek Общие вопросы Javascript 2 22.08.2010 16:12
Передача переменной в функцию из HTML тега A в $ CjEcho AJAX и COMET 2 28.07.2010 11:52
Вывод JS значения в одну строку в HTML velo Общие вопросы Javascript 7 15.12.2009 03:57
Передача массива JS в cookies Denis Общие вопросы Javascript 1 04.08.2009 12:24
js файл(незнаю как запустить функцию) Temchik Opera, Safari и др. 6 20.07.2009 11:49