Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Непонятки в анимации (https://javascript.ru/forum/dom-window/37090-neponyatki-v-animacii.html)

hoax 07.04.2013 20:23

Непонятки в анимации
 
вот полный код


function animate(opts) {

var start = new Date;

var timer = setInterval(function() {

var progress = (new Date - start) / opts.duration;

opts.step(progress);

if(progress > 1) progress = 1;
if(progress == 1) clearInterval(timer);


}, 15)

return timer;

}

function animateProp(opts) {

var start = opts.start;

var end = opts.end 
var prop = opts.prop;


opts.step = function(progress){
opts.elem.style[prop] = start+(end-start)*progress+ 'px';

 }
 
 return animate(opts);


}

var div = document.getElementById('opa');

div.onclick = function() {

animateProp({start:0,end:100, prop:'marginLeft', duration:1000, elem:div})


}



Несколько вопросов....

1) При клике вызывается ф-я animateProp(а тут ее параменты)

но почему они заключены в {}, если это объект, не разумнее было было сделать так : animateProp(opts= {start:....}) ???

2) При вызове ф-и animateProp, те параметры, которые указываются в ({}) - обращаются к ПЕРЕМЕННЫМ? Ну например в параметре указано animateProp({start:0}), а в этой же ф-и :

animateProp(opts) {var start = opts.start}

так свойство {start:0}, обращается вначале к var start, а затем переход в opts.start ?

Если да, то почему мы не можем поставить (без var) просто opts.start,
ведь opts.elem имеется и работает....

dmitriymar 07.04.2013 20:34

Цитата:

Сообщение от hoax
1) При клике вызывается ф-я animateProp(а тут ее параменты)

но почему они заключены в {}, если это объект, не разумнее было было сделать так : animateProp(opts= {start:....}) ???

зачем это лишнее вычисление выражения ? аргумент функции в любом из этих вариантов получит объект

Цитата:

Сообщение от hoax
2) При вызове ф-и animateProp, те параметры, которые указываются в ({}) - обращаются к ПЕРЕМЕННЫМ? Ну например в параметре указано animateProp({start:0}), а в этой же ф-и :

animateProp(opts) {var start = opts.start}

так свойство {start:0}, обращается вначале к var start, а затем переход в opts.start ?

потому что объекты передаются по ссылке, если так не сделать любые изменения в функции полученного объекта затронут и передаваемый объект.

а в обще- http://learn.javascript.ru/

Цитата:

Сообщение от hoax
так свойство {start:0}, обращается вначале к var start, а затем переход в opts.start ?

чего ? рано вам ещё такой код рассматривать -основы изучайте .
локальная переменная start инициируется значением свойства start, получаемого объекта в качестве аргумента функции

hoax 07.04.2013 20:37

это я знаю.

Меня интересует вопрос.

Почему работает вот это opts.elem без переменной var elem = opts.elem;

dmitriymar 07.04.2013 20:39

Цитата:

Сообщение от hoax
это я знаю.

Меня интересует вопрос.

Почему работает вот это opts.elem без переменной var elem = opts.elem;

Цитата:

Сообщение от dmitriymar
потому что объекты передаются по ссылке,

а исходя из кода :
Цитата:

Сообщение от hoax
animateProp({start:0,end:100, prop:'marginLeft', duration:1000, elem:div})

Цитата:

Сообщение от hoax
opts.elem.style[prop] = start+(end-start)*progress+ 'px';

это HTML Element какой является объектом
и присваивание переменной ничего не изменит

hoax 07.04.2013 20:44

тогда почему нельзя сделать тоже самое с остальными?

Например opts.start вместо var start = opts.start.

Тут же тоже идет присвание

dmitriymar 07.04.2013 20:49

Цитата:

Сообщение от hoax
тогда почему нельзя сделать тоже самое с остальными?

Например opts.start вместо var start = opts.start.

Тут же тоже идет присвание

Еще раз:
Цитата:

Сообщение от dmitriymar
потому что объекты передаются по ссылке, если так не сделать любые изменения в функции полученного объекта затронут и передаваемый объект.

разница понятна между простым значением свойства объекта- которое передаётся по значению, и значением свойства- объект, какой передаётся по ссылке?

Не нужно думать "тоже самое , не тоже самое" -нужно учить основы

hoax 07.04.2013 21:04

Хмммм.... раз elem:div, где div - значение свойства (elem), является объектом, который передается по ссылке в виде параметра, правильно?

Тогда что значит передача по значению?? В учебнике (где объекты) не нашел такое информации, может пропустил....:cray:

dmitriymar 07.04.2013 21:14

Цитата:

Сообщение от hoax
Хмммм.... раз elem:div, где div - значение свойства (elem), является объектом, который передается по ссылке в виде параметра, правильно?

Нет. свойство elem передаваемого объекта инициируется значением переменной div(получает ссылку на объект) и вместе они ссылаются на объект , какой является HtMl элементом -объектом(если не вдаваться в то, что есть Dom)

Цитата:

Сообщение от hoax
Тогда что значит передача по значению?? В учебнике (где объекты) не нашел такое информации, может пропустил....

в гугле забанили? http://www.google.com.ar/search?sour...%8E+javascript

первая же ссылка http://js-help.net/text/function/pos...arametrov1.php

hoax 07.04.2013 23:00

Блин, там как-то более понятно, наверное потому что на простых примерах.... переменная и объект.

А у нас тут значение свойства и объект. эх

Наверное единственно что я понял, это то, что если значение свойства не на что не ссылается, а имеет только лишь значение это есть передача по значению (простая). и то врятли это истина (

dmitriymar 07.04.2013 23:31

Цитата:

Сообщение от hoax
Блин, там как-то более понятно, наверное потому что на простых примерах.... переменная и объект.

А у нас тут значение свойства и объект. эх

Наверное единственно что я понял, это то, что если значение свойства не на что не ссылается, а имеет только лишь значение это есть передача по значению (простая). и то врятли это истина (

Ещё раз :
Цитата:

Сообщение от dmitriymar
рано вам ещё такой код рассматривать -основы изучайте .



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