Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.02.2012, 09:24
Новичок на форуме
Отправить личное сообщение для Adm123 Посмотреть профиль Найти все сообщения от Adm123
 
Регистрация: 07.02.2012
Сообщений: 5

Проблема с таймаутом...
Уважаемые форумчане, помогите, плз! Никак не пойму в чем проблема...

Я хочу, чтоб по клику мышки некий блок плавно переезжал с одного места на другое...

Вот код JS:
function MoveBlock(BlockID)
{
Block = document.getElementById(BlockID);
step = 10;
marg = parseInt(Block.style.marginLeft.replace("px", ""));
marg = marg+step;
if (marg < 300)
{
Block.style.marginLeft = marg + "px";
setTimeout(MoveBlock(BlockID), 1000);
}
}


И хтмл:
<div id="myblock" onClick="MoveMenu('myblock');" style="z-index: 2000; position: absolute; margin-left: 50px; left: 50px; top: 50px; width: 100px; height: 200px; background-color: #808080;">df</div>


Но при клике по нужному div-у он резко прыгает сразу на конечную позицию, плавного перемещения не происходит...
Ответить с цитированием
  #2 (permalink)  
Старый 07.02.2012, 09:40
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Посмотрите, в setTimeout надо передавать Function, а ваш MoveBlock возвращает неявно undefined. Держу пари что вы хотели написать

setTimeout(function () {
    MoveBlock(BlockID);  // Замыкание
}, 1000)
__________________
readOnly
Ответить с цитированием
  #3 (permalink)  
Старый 07.02.2012, 11:11
Новичок на форуме
Отправить личное сообщение для Adm123 Посмотреть профиль Найти все сообщения от Adm123
 
Регистрация: 07.02.2012
Сообщений: 5

О, чудо! Спасибо, poorking!
Хотя, признаться, я не понял почему оно заработало...
Ответить с цитированием
  #4 (permalink)  
Старый 07.02.2012, 11:19
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Потому что метод window.setTimeout принимает первым аргументом функцию, а вы предавали ее результат (и это не Function), если бы ваш Function MoveBlock не нужнался в аргументах, то вы бы написали просто

setTimeout(MoveBlock, 1000)

, но ему нужен аргумент поэтому пришлось замкнуть внутри анонимной функции-обертки ваш метод MoveBlock и его аргумент BlockID

function () {
    MoveBlock(BlockID);
}


и передали ее setTimeout-у

Читать

Замыкания
setTimeout
setInterval
Основы программной анимации на Javascript
__________________
readOnly
Ответить с цитированием
  #5 (permalink)  
Старый 07.02.2012, 11:51
Новичок на форуме
Отправить личное сообщение для Adm123 Посмотреть профиль Найти все сообщения от Adm123
 
Регистрация: 07.02.2012
Сообщений: 5

Теперь понял. Спасибо за помощь и разъяснения!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47