Prisoner
09-08-2005, 11:25
Доброго времени суток господа.
Интересная вещь, однако. Задумался на эффектом ссылки. Эффект со следующей сутью - при наведении (onMouseOver) ссылка (с бэкграундным изображением и бордером) начинает плавно мерцать - менять прозрачность в пределах 30-100%. Создается впечатление флэш-анимации текстовой ссылки.
Реализация работает для IE, но в FF обнаруживается, что при интенсивной смене opacity (10 раз в секунду с |delta| = 15%) не срабатывает событие onMouseOut, т.е. невозможно установить когда прекращать выполнение анимации. Замечено также, что такой багоглюк происходит только когда время задержки указателя на ссылке > ~2 сек. если быстро навести и свести указатель, то FF обрабатывает событийность корректно, во всех иных случаях это не так. Также глюки начинаются когда имеется суммирование тукущей opacity и delta (см. зеленый код). Если суммирование убрать, т.е. opacity=opacity, то глюк не проявляется. приходим к мысли, что при интенсивной смене opacity FF некорректно обрабатывает события сведения указателя с объекта, оно просто не происходит.
function flash(id)
{
var inp = document.getElementById('inp');
if (browser.isIE)
{
var obj = document.getElementById(id);
if ((obj.filters.alpha.opacity + delta > 100) || (obj.filters.alpha.opacity + delta < 30))
delta = - delta;
obj.filters.alpha.opacity += delta;
inp.value=iCnt+')'+' opacity:'+obj.filters.alpha.opacity+' delta:'+delta/100;
}
if (browser.isGecko)
{
var obj = document.getElementById(id).style;
if ((obj.opacity >= 1) || (obj.opacity <= 0.3) )
delta = - delta;
obj.opacity = parseFloat(obj.opacity)+delta/100;
inp.value=iCnt+')'+' opacity:'+parseFloat(obj.opacity)+' delta:'+delta/100;
}
}
Еще интересный момент - в документе (см. аттач) имеется вторая ссылка в событиях которой прописан обычный alert. Так в FF, если быстро провести указатель мыши так, что траектория пересекает эту вторую ссылку, то событие onMouseOut будет обработано только после того, как будет сдвинут указатель относительно конечной точки траектории.
P.S. Инпут, расположенный на форме, имеет задачу вывода текущих значений счетчика наведений(+1) и сведений(-1) мыши на/с объект(а), прозрачности объекта и текущего значения дельты прозрачности. Как видно в IE счетчик должен принимать значения 0|1.
Интересная вещь, однако. Задумался на эффектом ссылки. Эффект со следующей сутью - при наведении (onMouseOver) ссылка (с бэкграундным изображением и бордером) начинает плавно мерцать - менять прозрачность в пределах 30-100%. Создается впечатление флэш-анимации текстовой ссылки.
Реализация работает для IE, но в FF обнаруживается, что при интенсивной смене opacity (10 раз в секунду с |delta| = 15%) не срабатывает событие onMouseOut, т.е. невозможно установить когда прекращать выполнение анимации. Замечено также, что такой багоглюк происходит только когда время задержки указателя на ссылке > ~2 сек. если быстро навести и свести указатель, то FF обрабатывает событийность корректно, во всех иных случаях это не так. Также глюки начинаются когда имеется суммирование тукущей opacity и delta (см. зеленый код). Если суммирование убрать, т.е. opacity=opacity, то глюк не проявляется. приходим к мысли, что при интенсивной смене opacity FF некорректно обрабатывает события сведения указателя с объекта, оно просто не происходит.
function flash(id)
{
var inp = document.getElementById('inp');
if (browser.isIE)
{
var obj = document.getElementById(id);
if ((obj.filters.alpha.opacity + delta > 100) || (obj.filters.alpha.opacity + delta < 30))
delta = - delta;
obj.filters.alpha.opacity += delta;
inp.value=iCnt+')'+' opacity:'+obj.filters.alpha.opacity+' delta:'+delta/100;
}
if (browser.isGecko)
{
var obj = document.getElementById(id).style;
if ((obj.opacity >= 1) || (obj.opacity <= 0.3) )
delta = - delta;
obj.opacity = parseFloat(obj.opacity)+delta/100;
inp.value=iCnt+')'+' opacity:'+parseFloat(obj.opacity)+' delta:'+delta/100;
}
}
Еще интересный момент - в документе (см. аттач) имеется вторая ссылка в событиях которой прописан обычный alert. Так в FF, если быстро провести указатель мыши так, что траектория пересекает эту вторую ссылку, то событие onMouseOut будет обработано только после того, как будет сдвинут указатель относительно конечной точки траектории.
P.S. Инпут, расположенный на форме, имеет задачу вывода текущих значений счетчика наведений(+1) и сведений(-1) мыши на/с объект(а), прозрачности объекта и текущего значения дельты прозрачности. Как видно в IE счетчик должен принимать значения 0|1.