Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать такую функцыю... (https://javascript.ru/forum/misc/7242-kak-sdelat-takuyu-funkcyyu.html)

Niar 22.01.2010 16:39

Я еще толком не читал про события но где-то боком слышал о onload. Который срабатывает когда что-то полностью загружено(выполнено).

sms9 22.01.2010 16:48

Для #6: Ну если я точно не знаю сколько времени должно пройти!
В этой функции да можно вычислить через которое время она завершиться но для других подобных НЕТ!
function anim(ob, x, dx, t,callback){
if(t<0) callback();
document.getElementById(ob).style['top']=x+dx;
setTimeout(function(){anim(ob, x, dx, t-1)}, 10);}

Если б не функция setTimeout то можно било бы сделать
так:
function anim(ob, x, dx, t,callback){
if(t<0) callback();
document.getElementById(ob).style['top']=x+dx;
return anim(ob, x, dx, t-1)}

Но при таком раскладе элемент прорисован сначала и в конце своего движения!!!!
Есть ли такая функция в js аналог sleep() в php?
sleep() в PHP делает паузу при выполнении скрипта...
Если есть то она поможет в этом вопросе! Жду Ваших ответом!!!!

sms9 22.01.2010 16:51

При чем тут onload! Я же не загружаю ничего....

e1f 22.01.2010 16:55

Вам Gvozd уже написал. Поправить немного надо было, всего-то:
function anim(ob, x, dx, t,callback) { 
    if(t<0) return callback();
    document.getElementById(ob).style['top']=x+dx; 
    setTimeout(function(){anim(ob, x, dx, t-1, callback)}, 10);
} 

anim('div',1,1,25,function(){alert('алерт')});


Niar,
так если боком слышали, зачем советуете? Тем более что onload тут как не пришей ... рукав.

Niar 22.01.2010 16:58

Виноват. Надо было сначала уточнить точное действие события.

sms9 22.01.2010 17:18

Да я понял про использования callback! Я знал етод метод но не то я хотел...
например нужно мне переместить див с верха экрана в низ, выполнить некоторою функцию, потом переместить его назад и выполнить новою функцию...
если использовать посоветованный вами метод код будет иметь вид:
anim(ob, 150, 2, 15, function(){alert('Привет!'); anim(ob2, 100, -2, 13, function(){alert(2); Ище какаято функцыя...; anim(ob, 150, 2, 7)})})

А мне б хотелось что би не все так запутано било и это же имело такой вид:
anim(ob, 150, 2, 15);
alert('Привет!');
anim(ob2, 100, -2, 13);
alert(2);
Еще какая то функция...;
anim(ob, 150, 2, 7);

Так мне кажется намного проще!!!
Скажет кто то по поводу функцию аналог sleep() в php?

Niar 22.01.2010 17:20

Вот аналоги php функций в JS http://javascript.ru/php
Про sleep ни чего нету

e1f 22.01.2010 17:23

Реализовавать самому. Можно почитать исходники jQuery, к примеру, там есть query.

Kolyaj 22.01.2010 17:24

Цитата:

Сообщение от sms9
Так мне кажется намного проще!!!

Но так нельзя.

Цитата:

Сообщение от sms9
нужно мне переместить див с верха экрана в низ, выполнить некоторою функцию, потом переместить его назад и выполнить новою функцию...

Поменьше анонимных функций, если не нравится вложенность. И не надо вытягивать код в одну строку, не так страшно будет.
function downUp(downCallback, upCallback) {
    anim(bla, bla, function() {
        downCallback();
        anim(bla, bla, function() {
            upCallback();
        })
    });
}

downUp(function() {
    // ...
}, function() {
    // ...
});


sleep в JavaScript нет и не надо. Хотите писать на JS -- привыкайте к асинхронному коду.

subzey 23.01.2010 15:27

Niar,
мне кажется, sms9 может быть вполне украинцем

sms9,
Если Вам нужно, чтобы код выполнился сразу же после завершения потока, используйте setTimeout:
function testInner(){
	alert('Тут мы стартовали');
	setTimeout(function(){alert('Отложенный запуск')}, 0);
	alert('Тут мы закончили');
}

function testOuter(){
	alert('Запускаем внутреннюю функцию');
	testInner();
	alert('Вышли из внутренней функции');
}

testOuter();


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