Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Мерзкий ишак и рекурсивный setTimeout (https://javascript.ru/forum/css-html-internet-explorer/15666-merzkijj-ishak-i-rekursivnyjj-settimeout.html)

gavnomaster 09.03.2011 01:41

Мерзкий ишак и рекурсивный 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 цикл выполняется всего один раз не знаю почему. Как заставить работать?

Sweet 09.03.2011 02:09

У setTimeout два параметра: функция и задержка, так что нужно сделать как-то так:
setTimeout(function(){ scroll(x); }, 2);

ksa 09.03.2011 09:15

Цитата:

Сообщение от gavnomaster
В IE цикл выполняется всего один раз не знаю почему

Проверить это ооочень просто - потестируй свой алгоритм пошагово.

gavnomaster 09.03.2011 10:47

а я и проверил в самом начале тела функции вставил alert($scroll); один раз выскочило окошко при наведении и всё

gavnomaster 09.03.2011 10:51

Sweet, заработало! спасибо, но тормозит жуть.

Sweet 09.03.2011 11:16

Цитата:

Сообщение от gavnomaster
тормозит жуть.

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


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