| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > setTimeout() с параметром |
| Автор: Logree 4.9.2010, 16:33 | ||||||||||||
| Здравствуйте, тема с похожим название уже http://forum.vingrad.ru/forum/topic-230239.html, но там не то что мне нужно. Вот захотелось мне чтобы у меня элементики на страничке появлялись плавненько, я скомуниздил такой код:
но, 1. переменная x в которой передается конечное\начальное значение прозрачности мне не нужна так эти значения у меня константны 1\0. 2. вместо переменнлой x логичнее передавать в функцию сам объект который нужно менять, да и глобальная переменная obj выглядит как-то коряво. я переписал код так:
на что ff вот тут
почему он не принимает объект obj как аргумент? ведь x он передавал?! пробывал через arguments.calle - ошибка другая но результат тотже. как правильно передать obj? |
| Автор: Amphiluke 4.9.2010, 16:45 | ||
А вы разве не видите, что прибавляете объект к строке? тем самым выполняете неявное преобразование объекта к строковому типу, что и дает строку "[object HTMLDivElement]" вместо самого элемента. Попробуйте, к примеру, так:
Добавлено через 1 минуту и 50 секунд А вообще, чтобы не делать лишний раз рекурсию, есть метод setInterval. |
| Автор: ayax2005 4.9.2010, 20:59 |
| Честно говоря, вообще непонятно, зачем использовать setTimeout. Можно просто для всех интересующих элементов вызвать метод $('элементы').fadeIn("slow") по событию $(document).ready, он тоже работает со свойством opacity |
| Автор: Logree 4.9.2010, 23:28 | ||
Amphiluke, вы сами-то пробывали это запустить... не получается так.
я вам показал что в предыдущем примере этого не происходит для x. Как это сделать для setTimeout? |
| Автор: ayax2005 5.9.2010, 02:10 |
| Уважаемый кисонька, мне кажется многоуважаемый Logree сам решит, пользоватся ли ему моим советом |
| Автор: Logree 5.9.2010, 10:27 | ||||||
| Уважаемый, Amphiluke, прошу прощения, действительно ваш пример работает ksnk, я чувствовал что кто нибудь да напишет про jquery.
Я вырезал то что должно быть для IE, мне бы так отладить. Ну раз уж у меня всё так замечательно работает, мне внезапно, да и честно говоря это был изначальный вариант, захотельсь сделать все по-человечески т.е цыклом:
но почему-то в таком случае прозрачность изменяется мгновенно, хотя задержка по идеи быть должна :( изменение времени задержки не помогает, в чём дело? По совету Amphiluke, сделал через setInterval() - всё работает
почему с цыклом не всё так прекрасно ? |
| Автор: Amphiluke 5.9.2010, 12:32 |
| Цикл, ИМХО тут абсолютно не к месту… Весь смысл использования метода setTimeout в том, чтобы отложить исполнение какого-то кода или вызов callback-функции на заданное время. Цикл же выполняет инструкции в своем теле безотлагательно и настолько быстро, насколько это возможно. Решение с методом setTimeout является рекурсивным, в том смысле, что callback-функция через указанный временной интервал осуществляет вызов самой себя через тот же (или другой) интервал. А это непонятно. Зачем порождать кучу таймеров на вызов функции с пустым телом? |
| Автор: Logree 5.9.2010, 13:10 | ||||||
| тогда я чтото не понимаю как работает js, ведь пока не завершится функция которая должна создать задержку, цыкл не может продолжаться, а тут как-то все не так... ну да ладно. У меня возник вопрос не совсем относящийся к теме:
то все замечательно работает, если же я выношу стиль в файл: style.css
уже ни чего не происходит! в чём дело? |
| Автор: Amphiluke 5.9.2010, 14:06 | ||||
Вы несколько неправильно понимаете то, как работает схема с функциями обратного вызова (callback). Метод setTimeout возвращает управление сразу как только установит таймер на отложенный вызов callback-функции. Этот таймер тикает в фоне, не препятствуя выполнению кода, следующего за вызовом метода setTimeout. Когда время истечет, callback-функция вызывается по той ссылке, которая была передана методу при его вызове. При этом функция, вызывавшая метод setTimeout уже, возможно, к тому времени отработает полностью. Добавлено через 11 минут и 19 секунд В этом: установка CSS свойства opacity не обязана влиять на Javascript-свойство opacity объекта style. Решение — либо устанавливать свойство opacity объекта style программно после загрузки страницы, либо использовать вычисляемые стили
Для IE, думаю, сделаете сами (см. свойство currentStyle). |
| Автор: Logree 5.9.2010, 15:09 |
| Спасибо, второй вариант подойдёт. |