Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.03.2011, 01:41
Интересующийся
Отправить личное сообщение для gavnomaster Посмотреть профиль Найти все сообщения от gavnomaster
 
Регистрация: 24.05.2010
Сообщений: 27

Мерзкий ишак и рекурсивный setTimeout
function scroll(x) {
                div = document.getElementById("portfolio-wrapper");
                if (x == 1) {
                    y = document.getElementById("portfolio").offsetWidth - 920 + 5;
                    if (div.scrollLeft < y) {
                        div.scrollLeft+= 2;
                    }
                    else {
                        div.scrollLeft = y;
                        $scroll = false;
                    }
                }
                else if (x == 0) {
                    $scroll = false;
                }
                else if (x == -1) {
                    div.scrollLeft-= 2;
                }
                else {
                    return false;
                }
                if ($scroll) {
                    setTimeout(scroll, 2, x);
                }
                return true;
            }


Вот эта функция работает во всех нормальных браузерах, кроме нашего уродца. Поясняю сделал карусельку наводишь на стрелочку и начинает содержимое прокручиваться. В IE цикл выполняется всего один раз не знаю почему. Как заставить работать?
Ответить с цитированием
  #2 (permalink)  
Старый 09.03.2011, 02:09
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

У setTimeout два параметра: функция и задержка, так что нужно сделать как-то так:
setTimeout(function(){ scroll(x); }, 2);
Ответить с цитированием
  #3 (permalink)  
Старый 09.03.2011, 09:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от gavnomaster
В IE цикл выполняется всего один раз не знаю почему
Проверить это ооочень просто - потестируй свой алгоритм пошагово.
Ответить с цитированием
  #4 (permalink)  
Старый 09.03.2011, 10:47
Интересующийся
Отправить личное сообщение для gavnomaster Посмотреть профиль Найти все сообщения от gavnomaster
 
Регистрация: 24.05.2010
Сообщений: 27

а я и проверил в самом начале тела функции вставил alert($scroll); один раз выскочило окошко при наведении и всё
Ответить с цитированием
  #5 (permalink)  
Старый 09.03.2011, 10:51
Интересующийся
Отправить личное сообщение для gavnomaster Посмотреть профиль Найти все сообщения от gavnomaster
 
Регистрация: 24.05.2010
Сообщений: 27

Sweet, заработало! спасибо, но тормозит жуть.
Ответить с цитированием
  #6 (permalink)  
Старый 09.03.2011, 11:16
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от gavnomaster
тормозит жуть.
Ну ie никогда не был "самым быстрым браузером", да и скрипт явно требует оптимизации:
- Вместо else if используй switch
- Использовать var или нет - дело твое, но вот что странно. Зачем каждый раз заново брать элементы "portfolio-wrapper" и "portfolio".offsetWidth? Вынеси эту операцию за пределы функции.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26
Аргументы в setTimeout - проблема в IE 6 micscr Общие вопросы Javascript 8 28.09.2009 13:08
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36