Таймер Javascript с использованием style.backgroundPosition Работает нормально в ff & chrome, не так удачно в IE

Я сделал очень простой таймер обратного отсчета в js, который принимает значения из массива и применяет их к элементам background-position свойство (отображает другую часть изображения в зависимости от значения curS).

Вот код:

window.onload = timer;
        var curS = 5;
        function timer(){
            var bgP = new Array("0 -1px","0 -22px","0 -45px","0 -67px","0 -89px");
            if (curS <= 5){
            document.getElementById("count").style.backgroundPosition = bgP[curS];
            }       
        curS--;
        setTimeout("timer()",1000);
        }

Это работает в FF,Chrome, Opera и т. Д., Но не в IE 7/8. Я знаю, что IE немного сомнителен относительно старой background-position и прочитал, что он предпочитает background-position-x & background-position-y

Поэтому я поместил следующий код в IE только условно:

window.onload = timer;
        var curS = 5;
        function timer(){
            var bgPx = 0;
            var bgPy = new Array("-1px","-22px","-45px","-67px","-89px");
            if (curS <= 5){
            document.getElementById("count").style.backgroundPositionX = bgPx;
            document.getElementById("count").style.backgroundPositionY = bgPy[curS];
            }       
        curS--;
        setTimeout("timer()",1000);
        }

Это тоже не сработало, счетчик остается статичным, кто-нибудь может пролить свет на эту проблему? Спасибо заранее.

1 ответ

Решение

Ваша проблема в индексах массива: вы начинаете с 5, где вы должны начинать с 4. Chrome игнорирует его, когда вы пытаетесь установить style.backgroundPosition в значение undefined, но IE выдает "Недопустимый аргумент".

Пока я здесь, я хотел бы также отметить, что писать функции в виде строк в javascript не всегда хорошо. Ваши тайм-ауты должны быть setTimeout(timer,1000)используя прямую ссылку на функцию, а не строку.

Другие вопросы по тегам