Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > кроссбраузерность ф-ции


Автор: Smith 30.3.2008, 07:41
Код

var t = 1;
var n = 10;
var i = 0;

var fading = false;

function fade(sFadeFinishColor) {
    sFadeStartColor = document.body.style.backgroundColor;

    fading = setInterval(function() {
        if (i<=n) {
            i++;
            document.body.style.backgroundColor = getFadeMiddleColor(sFadeStartColor, sFadeFinishColor);
        } else {
            fading = clearInterval(fading);
            i = 0;
        }
    }, t);  
} 

function getFadeMiddleColor(sFadeStartColor, sFadeFinishColor) 
{
    if(window.XMLHttpRequest) { 
        var aRGBStart = sFadeStartColor.slice(4, -1).split(/,\s/); 
        var aRGBFinish = sFadeFinishColor.slice(4, -1).split(/,\s/);
    } else {
        var aRGBStart = sFadeStartColor.slice(1).match(/.{2}/g);
        var aRGBFinish = sFadeFinishColor.slice(1).match(/.{2}/g);
    }

    if(window.XMLHttpRequest)
        return 'rgb('+ Math.floor(aRGBStart[0] * ((n - i)/n) + aRGBFinish[0] * (i/n)) + ',' + Math.floor(aRGBStart[1] * ((n - i)/n) + aRGBFinish[1] * (i/n)) + ',' + Math.floor(aRGBStart[2] * ((n - i)/n) + aRGBFinish[2] * (i/n)) +')'; 
    else
        return 'rgb('+ Math.floor(('0x' + aRGBStart[0]) * ((n - i)/n) + ('0x' + aRGBFinish[0]) * (i/n)) + ',' + Math.floor(('0x' + aRGBStart[1]) * ((n - i)/n) + ('0x' + aRGBFinish[1]) * (i/n)) + ',' + Math.floor(('0x' + aRGBStart[2]) * ((n - i)/n) + ('0x' + aRGBFinish[2]) * (i/n)) +')'; 
}

код выполняется идеально под firefox, один раз под ie(при повторном выполнении - завершается с ошибкой) и вообще не выполняется в опере(из-за определения aRGBStart, aRGBStart - они не вовзращают нужного значения). Собтно, хелп smile 

Автор: fidres 16.12.2008, 05:40
setInterval() имеет две переменные (по крайней мере в IE): собственно имя функции, которую надо выполнить и количество милисекунд - ИНТЕРВАЛ, после которого эта функция вновь запустится.
а по поводу оперы - нам ещё повезло, что объект body.style почти одинаков в IE и FF.
;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)